我正在创建一个 Perl 程序,将指定的主机添加到 root 的known_hosts 文件中。该程序可以在 AIX 和 Linux 中运行,但不能在 Solaris 中运行,遗憾的是,我找不到它的等效命令。
样品线:
system("ssh-keyscan -H www.myserver.domain >> /.ssh/known_hosts");
输出:
ssh-keyscan:非法选项 -- H 用法:ssh-keyscan [-v46] [-p 端口] [-T 超时] [-f 文件] [主机 | 端口]地址列表名单] [...]
更新1:
我尝试了以下命令,但它仍然要求真实性:
system("ssh-keyscan -t rsa www.myserver.domain >> /.ssh/known_hosts");
更新2: Perl 之外的输出:
# ssh-keyscan -t rsa www.myserver.domain >> /.ssh/test123.text
# www.myserver.domain SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u3
# less test123.text
# www.myserver.domain ssh-rsa KEY
# ssh www.myserver.domain
# The authenticity of host 'www.myserver.domain (IP)' can't be established. RSA key fingerprint is FINGERPRINT. Are you sure you want to continue connecting (yes/no)?
答案1
查看 Solaris 10/11 上 ssh-keyscan 的手册页,似乎不支持该开关。
参考:ssh-keyscan 手册页ssh-keyscan [-v46] [-p port] [-T timeout] [-t type]
[-f file] [-] [host... | addrlist namelist] [...]
我认为您可以ssh-keyscan <hostname>
检索密钥然后将它们写入您的~/.ssh/known_hosts
文件。这仍然有效,但只是不会将主机使用的所有名称放在一行中,如下所示:
hostname1, hostname1.fqdn.com .....
因此,您可能需要对生成的文件进行一些清理工作known_hosts
。
主机真实性
如果您发现自己遇到了相当于第 22 条陷阱的问题,即您无法扫描文件中尚不存在的主机known_hosts
:
无法确定主机“www.myserver.domain (IP)”的真实性。 RSA密钥指纹是FINGERPRINT。您确定要继续连接吗(是/否)?
您可以通过暂时禁用来解决此问题StrictHostKeyChecking
:
$ cat ~/.ssh/config
...
StrictHostKeyChecking no
...
然后再次执行您的keyscan <host> ...
命令。完成后,请务必StrictHostKeyChecking
从您的~/.ssh/config
.