每天早上,以及一天中多次,我都需要打开一个 ssh 会话,连接到代理跳转后面的虚拟机。由于 putty 没有原生的代理跳转功能,我只需登录到跳转服务器,然后通过 ssh 连接即可。但是,如果我在打开跳转服务器和 ssh 之间注意力不集中,这有点麻烦,而且容易出错,在办公室环境中就会出现这种情况。
评分最高的建议是使用远程命令,例如如何使用PuTTY设置代理跳转并添加我想在连接时执行的命令。但是,远程命令根本不起作用。它不会 ssh(远程命令 = 'ssh {目标 IP}'),也不会 echo 或 cd 或 ls。当我将远程命令传递给跳转服务器时发生的唯一事情是它不会打印 MoTD 并像平常一样让我处于提示符状态。我该怎么做才能解决这个问题?
尝试使用叮当而不是远程命令:
(尝试 #1)
- 已创建新会话。主机名(或 IP 地址)= 端口 22(SSH)上的 {ProxyJump IP}。
- 连接 -> 代理。代理类型 = 本地。代理主机名 = {ProxyJump IP}。端口 = 22。用户名 = {username}。密码 = {password}。Telnet 命令,或本地代理命令 = 'plink.exe %user@%proxyhost -nc %host:%port'
- 结果:空白屏幕,其中 title = {ProxyJump IP}。没有提示。没有提供目标 VM IP,因此事后看来无法工作。
(尝试#2)
- 已创建新会话。主机名(或 IP 地址)= 端口 22(SSH)上的 {目标 VM IP}。
- 连接 -> 代理。代理类型 = 本地。代理主机名 = {ProxyJump IP}。端口 = 22。用户名 = {username}。密码 = {password}。Telnet 命令,或本地代理命令 = 'plink.exe %user@%proxyhost -nc %host:%port'
- 结果:空白屏幕,其中标题 = {目标 VM IP}。无提示。
(尝试#3)看到 Putnik 对https://stackoverflow.com/questions/28926612/putty-configuration-equivalent-to-openssh-proxy命令,我添加了我的 ssh 密钥的路径。
- 已创建新会话。主机名(或 IP 地址)= 端口 22(SSH)上的 {目标 VM IP}。
- 连接 -> 代理。代理类型 = 本地。代理主机名 = {ProxyJump IP}。端口 = 22。用户名 = {username}。密码 = {password}。Telnet 命令,或本地代理命令 = 'plink.exe %user@%proxyhost -ssh -i {path/to/key} -nc %host:%port'
- 结果:提示输入用户名。输入后,我就可以像预期的那样登录了!
答案1
尝试多种方法后,简短的回答是:不可以。远程命令无法以这种方式工作。
按照 Martin Prikryl 的建议,另一种方法是不要使用 SSH:远程命令,而是使用 plink.exe 的连接->代理选项。
我创建了一个指向位于 proxyJump 后面的目标 VM IP 的会话。然后,在 Connection->Proxy 中,我设置了一个本地代理,其中代理主机名是我的 ProxyJump 服务器的 IP,对于“本地代理命令”,我使用了“plink.exe %user@%proxyhost -ssh -i path\to\key.ppk -nc %host:%port”
即使我尝试在用户名字段中添加它,或者用我的用户名替换本地命令中的“%user”,我仍然必须输入我的用户名,但这已经足以满足我的要求了。