LoginSignup
0
1

More than 3 years have passed since last update.

Java6アプリからSSHJを使用してSSH接続する

Posted at

やりたいこと

Java6でコンパイルした自作アプリから別マシンに、SSHJライブラリを使用して、SSH接続することです。
以前はJSchライブラリを使用して実現しようとしたのですが、こちらの記事に書いたように上手くいかなかないので、JSchライブラリからSSHJライブラリに変更して実現しようとしています。

環境

接続先

  • Ubuntu 16.04 LTS
  • OpenSSH 7.2p2

クライアント

  • Windows 8.1
  • 自作アプリ(Java6で開発)
  • SSHJ

サンプルコード

SSH接続時にパスワード認証を行うサンプルはたくさん見つかると思いますが、鍵認証(パスフレーズあり)を行うサンプルが少なかったように思えたので、備忘録をかねて、接続に成功したサンプルコードを記載しておきます。

単にSSH接続するだけではツマらないので、SSH接続後にファイルのダウンロードを行うようなコードにしてみました。

オール大文字の英字は、外部から指定してもらうなり、コード内で定義するなりしておく必要がある部分です。
あと、例外処理はだいぶサボってます。

Sample.java
        SSHClient ssh = new SSHClient();
        ssh.addHostKeyVerifier(new PromiscuousVerifier());
        try {
            ssh.connect(HOST, PORT);
            ssh.authPublickey(USER, ssh.loadKeys(PRIVATEKEYFILEPATH, PASSPHRASE));
            ssh.newSCPFileTransfer().download(SRCDIR, new FileSystemFile(DSTDIR));
            ssh.disconnect();
            ssh.close();
        } catch (UserAuthException e) {
            e.printStackTrace();
        } catch (TransportException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

鍵認証時の注意点

SSHJで使用可能な秘密鍵ファイルは、PEM形式のファイルのようです。

秘密鍵ファイル・公開鍵ファイルはssh-keygenコマンドを使用して作成すると思いますが、使用するssh-keygenコマンドのバージョンによっては、デフォルトで以下の形式の秘密鍵ファイルを生成します。
SSHJライブラリでこの秘密鍵ファイルを使用すると認証に失敗します。

-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
:
:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END RSA PRIVATE KEY-----

SSHJライブラリで認証するためには、以下のような形式の秘密鍵ファイルを使用します。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
:
:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END RSA PRIVATE KEY-----

上のようなPEM形式の秘密鍵ファイルを生成するためには、ssh-keygenコマンドのオプションとして、-m PEMを指定します。

-- 以上 --

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1