Perl 在linux上自动替换主机密钥
我有一个用以下代码连接到SFTP服务器的脚本:Perl 在linux上自动替换主机密钥,perl,sftp,Perl,Sftp,我有一个用以下代码连接到SFTP服务器的脚本: use Net::SFTP::Foreign; my %cfg = ( user => "$user", password => "$password", port => 22, more => [-o => 'StrictHostKeyChecking no'] ); my $sftp = Net::SFTP::Foreign->
use Net::SFTP::Foreign;
my %cfg = (
user => "$user",
password => "$password",
port => 22,
more => [-o => 'StrictHostKeyChecking no']
);
my $sftp = Net::SFTP::Foreign->new("$host",%cfg);
我使用StrictHostKeyChecking来确保脚本自动接受ssh密钥。
当服务器用新的主机密钥替换主机密钥时,问题就开始了。我收到错误:警告:远程主机标识已更改
因此,我必须通过运行ssh-keygen-R testserver.com手动删除密钥
之后,脚本又可以正常工作了。
我正试图找到一种方法,在密钥发生更改时自动替换它。
从技术上讲,每次脚本运行时,我都可以运行ssh-keygen-R testserver.com,但我不喜欢这种解决方案。
到目前为止,我还无法找到一种很好的自动替换密钥的方法。添加另一个选项,将UserKnownHostsFile指向/dev/null应该可以做到这一点,但从安全角度来看,不建议这样做;-)
也许
strichhostkeychecking=no
我相信它在没有equal的情况下也能工作:在首次运行时会自动添加密钥。只有在已知的\u hosts文件中已经存在密钥并且服务器正在提供不同的密钥时,才会失败。将已知的\u hosts符号链接到/dev/null;)@看起来这是正确的解决方案。非常感谢。
use Net::SFTP::Foreign;
my %cfg = (
user => "$user",
password => "$password",
port => 22,
more => [-o => 'StrictHostKeyChecking=no',
-o => 'UserKnownHostsFile=/dev/null']
);
my $sftp = Net::SFTP::Foreign->new("$host",%cfg);