能否不借助sshpass、expect或密钥,通过管道重定向给ssh传密码?
不借助sshpass/expect/密钥,用管道/重定向给ssh传密码可行吗?
结论:不可行,原因在于SSH的密码输入机制是直接读取终端(tty)设备,而非标准输入(stdin),管道和重定向传递的内容都属于stdin,SSH会直接忽略这部分输入,转而向终端请求密码。
为什么你的尝试没生效?
- 命令
ssh | echo "password"逻辑完全错误:它是将ssh的标准输出(stdout)连接到echo的标准输入(stdin),但echo根本不会读取stdin,同时ssh也不会从自身的stdout获取密码。 - 命令
ssh < <(echo "password")虽然将密码内容传入了ssh的stdin,但SSH设计时就刻意绕过stdin读取密码,目的是避免密码通过管道、文件等途径被意外捕获,提升安全性,所以这部分内容不会被识别为密码输入。
补充说明
如果需要自动化SSH登录,最安全且推荐的方式是使用SSH密钥对。如果暂时无法使用密钥,还是得依赖sshpass或expect这类专门处理交互式输入的工具——它们的核心原理是直接操控终端设备,模拟用户手动输入密码的行为,这是绕过SSH终端读取限制的可行方案。
内容的提问来源于stack exchange,提问作者Y.G. Kumar
相关产品推荐
相关产品推荐

