我可以将服务器的 RSA 主机密钥作为 PuTTY 命令行选项传递吗?
Can I pass RSA hostkey of server as PuTTY command line option?
我们在 PuTTY 命令行上是否有选项将 RSA 主机密钥作为参数发送,类似于 WinSCP -hostkey
。?
当前使用的 PuTTY 命令:
putty.exe -ssh -l username -pw password -m command.txt RemoteServerIP
是否有类似 WinSCP 的选项,可以像下面那样传递 RSA 主机密钥:
open sftp://username :password@RemoteServerIP/ -hostkey="ssh-rsa 2048 11:2c:5d:f5:22:22:ab:12:3a:be:37:1c:cd:f6:13:d1"
另外让我知道,如果我选择使用 PuTTY 执行此任务是一个错误的选择。
有兴趣了解整个背景的详细解释:
我开发了一个 Django 应用程序来启动一些远程脚本
并完成任务。这使用 putty ssh 到 运行 命令
后台使用subprocess模块,参数从
Djangofront 端.
我面临的问题是,有多个用户会使用这个
应用程序启动他们的脚本。唯一的要求是他们有
将服务器的 IP 地址和 RSA 密钥存储在配置文件中
Django 服务器。
由于所有服务器都使用 RSA 密钥,因此首次登录时要求
确认RSA指纹存储提示。
通常当我们从我们的本地机器上手动启动时,我们会给出
是的,第一次。和随后的 运行s 它不会要求
确认。
因为这些脚本将从用户所在的 DjangoServer 运行ning
将无法访问,有没有办法让我仍然能够 运行
使用腻子的远程脚本?
请注意我知道使用 WinSCP 启动脚本但是
不幸的是,在我们的环境中,我无法启动脚本
WinSCP,但我可以 FTP 使用 WinSCP 并且我使用 hostkey 选项所以它
不提示确认
PuTTY 也 has -hostkey
switch,只是语法略有不同:
-hostkey 11:2c:5d:f5:22:22:ab:12:3a:be:37:1c:cd:f6:13:d1
事实上,PuTTY 并不是自动执行命令的正确工具。
而是使用 Plink (PuTTY command-line connection tool):
plink.exe -ssh -l username -pw password -hostkey aa:bb:cc:... hostname command
有几种方法可以处理 SSH/SCP/SFTP 主机密钥验证。
this answer to a similar question on ServerFault 中描述了一种方法。 Echo y
或 n
取决于您是否希望将密钥添加到注册表的缓存中。重定向错误输出流以抑制通知消息。
echo 'y' | plink -l USERNAME HOSTNAME 'COMMANDLINE' 2>$null # cache host key
echo 'n' | plink -l USERNAME HOSTNAME 'COMMANDLINE' 2>$null # do not cache host key
但是请注意,如果您不想缓存密钥 并且 使用批处理模式,这将失败:
echo 'n' | plink -batch -l USERNAME HOSTNAME 'COMMANDLINE' # this won't work!
但是请注意,此方法实质上禁用了主机密钥验证,该验证已到位以防止中间人攻击。也就是说,不推荐自动接受来自任意远程主机的主机密钥。
自动接受任意主机密钥的更好替代方案是:
保存已验证主机密钥的 PuTTY 会话,以便您可以从 plink
重新使用它,如下所示:
plink -load SESSION_NAME 'COMMANDLINE'
在 运行 plink
之前在注册表中预缓存主机密钥。有一个 Python script 可以将 OpenSSH known_hosts 格式的密钥转换为注册表文件,如果您不想手动打开会话并验证指纹,则可以在 Windows 上导入该注册表文件.
当运行 plink
:
时提供服务器主机密钥的指纹
$user = 'USERNAME'
$server = 'HOSTNAME'
$cmd = 'COMMANDLINE'
$fpr = 'fa:38:b6:f2:a3:...'
plink -batch -hostkey $fpr -l $user $server $cmd
当然,所有这些都假设您通过安全渠道获得了相关信息并进行了正确验证。
我们在 PuTTY 命令行上是否有选项将 RSA 主机密钥作为参数发送,类似于 WinSCP -hostkey
。?
当前使用的 PuTTY 命令:
putty.exe -ssh -l username -pw password -m command.txt RemoteServerIP
是否有类似 WinSCP 的选项,可以像下面那样传递 RSA 主机密钥:
open sftp://username :password@RemoteServerIP/ -hostkey="ssh-rsa 2048 11:2c:5d:f5:22:22:ab:12:3a:be:37:1c:cd:f6:13:d1"
另外让我知道,如果我选择使用 PuTTY 执行此任务是一个错误的选择。
有兴趣了解整个背景的详细解释:
我开发了一个 Django 应用程序来启动一些远程脚本 并完成任务。这使用 putty ssh 到 运行 命令 后台使用subprocess模块,参数从 Djangofront 端.
我面临的问题是,有多个用户会使用这个 应用程序启动他们的脚本。唯一的要求是他们有 将服务器的 IP 地址和 RSA 密钥存储在配置文件中 Django 服务器。
由于所有服务器都使用 RSA 密钥,因此首次登录时要求 确认RSA指纹存储提示。
通常当我们从我们的本地机器上手动启动时,我们会给出 是的,第一次。和随后的 运行s 它不会要求 确认。
因为这些脚本将从用户所在的 DjangoServer 运行ning 将无法访问,有没有办法让我仍然能够 运行 使用腻子的远程脚本?
请注意我知道使用 WinSCP 启动脚本但是 不幸的是,在我们的环境中,我无法启动脚本 WinSCP,但我可以 FTP 使用 WinSCP 并且我使用 hostkey 选项所以它 不提示确认
PuTTY 也 has -hostkey
switch,只是语法略有不同:
-hostkey 11:2c:5d:f5:22:22:ab:12:3a:be:37:1c:cd:f6:13:d1
事实上,PuTTY 并不是自动执行命令的正确工具。
而是使用 Plink (PuTTY command-line connection tool):
plink.exe -ssh -l username -pw password -hostkey aa:bb:cc:... hostname command
有几种方法可以处理 SSH/SCP/SFTP 主机密钥验证。
this answer to a similar question on ServerFault 中描述了一种方法。 Echo y
或 n
取决于您是否希望将密钥添加到注册表的缓存中。重定向错误输出流以抑制通知消息。
echo 'y' | plink -l USERNAME HOSTNAME 'COMMANDLINE' 2>$null # cache host key
echo 'n' | plink -l USERNAME HOSTNAME 'COMMANDLINE' 2>$null # do not cache host key
但是请注意,如果您不想缓存密钥 并且 使用批处理模式,这将失败:
echo 'n' | plink -batch -l USERNAME HOSTNAME 'COMMANDLINE' # this won't work!
但是请注意,此方法实质上禁用了主机密钥验证,该验证已到位以防止中间人攻击。也就是说,不推荐自动接受来自任意远程主机的主机密钥。
自动接受任意主机密钥的更好替代方案是:
保存已验证主机密钥的 PuTTY 会话,以便您可以从
plink
重新使用它,如下所示:plink -load SESSION_NAME 'COMMANDLINE'
在 运行
plink
之前在注册表中预缓存主机密钥。有一个 Python script 可以将 OpenSSH known_hosts 格式的密钥转换为注册表文件,如果您不想手动打开会话并验证指纹,则可以在 Windows 上导入该注册表文件.当运行
时提供服务器主机密钥的指纹plink
:$user = 'USERNAME' $server = 'HOSTNAME' $cmd = 'COMMANDLINE' $fpr = 'fa:38:b6:f2:a3:...' plink -batch -hostkey $fpr -l $user $server $cmd
当然,所有这些都假设您通过安全渠道获得了相关信息并进行了正确验证。