以下に示すように、Jsch(Jcraft)ライブラリを使用してSSHサーバーとのSSH接続を確立しています。
JSch jsch = new JSch();
String user = "****";
String Host = "****";
int port = 22;
String privateKey = "***.ppk";//Path to private key(The file is in .ppk format)
try
{
jsch.addIdentity(privateKey);
Session session = jsch.getSession(user, Host, port);
Java.util.Properties config = new Java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
/*file transfer code*/
sftpChannel.disconnect();
session.disconnect();
}
catch (Exception e)
{
e.printStackTrace();
}
「StrictHostKeyChecking」が無効になっているため、SSH接続は正常に確立されます。有効にすると、次のエラーが発生します。
com.jcraft.jsch.JSchException: UnknownHostKey: ******. RSA key f
is *************
at com.jcraft.jsch.Session.checkHost(Session.Java:805)
at com.jcraft.jsch.Session.connect(Session.Java:345)
at com.jcraft.jsch.Session.connect(Session.Java:183)
以下に示すように、コードに既知のホストファイルを設定する必要があることを理解しています。
jsch.setKnownHosts(knownHostsFileName);
以下のコマンドでknown_hostsファイルを生成できません:
ssh-keyscan <Host> > known_hosts
次のエラーがスローされます:
'ssh-keyscan' is not recognized as an internal or external command,
operable program or batch file.
.ppk形式の公開鍵と秘密鍵しか持っていません。私はknown_Hostファイルを持っていません。
known_Hostファイルを作成するにはどうすればよいですか?
なぜssh-keyscanコマンドスローエラー-内部/外部コマンドとして認識されないのですか?
ssh-keyscan
はLinux/Unixからのコマンドです。 Windowsで実行するには、Windowsで実行するように変更されたバージョンが必要です。最も簡単なのは、 git-for-windows ( download )をインストールし、Git Bash
を開くことです。このコンソール内では、ssh-keyscan
コマンドを使用できます。
このファイルは通常、ssh-keyscan
によって、またはユーザーのSSHホストへの接続によって作成されます。
コマンドで簡単に作成できます
ssh-keyscan [Host]
出力を保存します。 -H
オプションはハッシュ出力を有効にしますが、問題のライブラリがそれを使用できるかどうかはわかりません。
known_hosts
ファイル自体は、最初にホストフィンガープリントを確認しないとあまり役に立たないことに注意してください。次の注意は、ssh-keyscan
のマニュアルページから直接引用したものです。
SECURITY If an ssh_known_hosts file is constructed using ssh-keyscan without veri- fying the keys, users will be vulnerable to man in the middle attacks. On the other hand, if the security model allows such a risk, ssh-keyscan can help in the detection of tampered keyfiles or man in the middle attacks which have begun after the ssh_known_hosts file was created