通过Plink建立连接后,远程SSH输入密码失败问题求助
解决Plink嵌套SSH时密码无法自动输入的问题
问题原因
你之前的方法无效,核心原因是:ssh命令启动后会直接接管终端会话,它不会从父进程的标准输入流读取密码,而是要求与终端进行交互式输入。所以你写在cmd.txt里的password2只会被server1的shell接收,根本传不到ssh user2@server2这个进程里。
可行解决方案
1. 使用sshpass自动传递密码(需server1安装sshpass)
修改cmd.txt内容为:
sshpass -p password2 ssh user2@server2
sshpass工具的作用就是帮你把密码直接传递给ssh命令,跳过交互式输入环节。
2. 配置SSH免密登录(推荐,更安全)
这是长期解决这类问题的最优方案,步骤如下:
- 在本地生成SSH密钥对:
一路回车默认设置即可,生成的公钥在ssh-keygen -t rsa~/.ssh/id_rsa.pub - 将公钥上传到server1的user1账户:
plink.exe -ssh user1@server_ip1 -pw password1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub - 从server1将公钥上传到server2的user2账户:
修改cmd.txt为:
执行一次Plink命令完成公钥上传后,后续直接在mkdir -p ~/.ssh && cat ~/.ssh/id_rsa.pub | ssh user2@server2 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"cmd.txt里写ssh user2@server2就能免密登录。
3. 嵌套使用Plink命令(无需额外工具)
如果server1上也装有Plink,可以直接在本地Plink命令里嵌套调用,跳过中间shell的输入问题:
plink.exe -ssh user1@server_ip1 -pw password1 -t "plink.exe -ssh user2@server2 -pw password2"
这种方式直接让server1上的Plink处理到server2的连接,密码直接通过Plink的参数传递,避免了交互式输入问题。
内容的提问来源于stack exchange,提问作者Miriam Safwat
相关产品推荐
相关产品推荐

