这里的目标是只能ssh 10.0.200.9.switch -l customer
从我的笔记本电脑写入并登录而无需输入密码。
- 交换机位于本地 LAN 内部的意思
Laptop --> bastion.example.com --> 10.0.200.9
。 - 该交换机不支持 ssh 密钥,仅支持密码。
- 我的笔记本电脑和堡垒服务器都运行 OpenSSH 7.2p2。
- 我在尝试跳过密码提示时使用 sshpass 1.05。如果存在其他解决方案,我愿意接受。
这是半工作状态:
/home/user/.ssh/config configuration 1
Host bastion
hostname bastion.example.com
port 2222
user root
identityfile /home/user/.ssh/id_rsa
Match host *.switch user customer
ProxyCommand ssh bastion -W $(echo %h | grep -Po '^[0-9.]+[0-9]+' ):%p
工作正常但要求输入密码
user@laptop:~/.ssh$ ssh 10.0.200.9.switch -l customer
[email protected]'s password:
Type 'help' or '?' to get help.
Switch#
工作并且不要求输入密码,但在控制台中写入的时间较长
user@laptop:~/.ssh$ export SSHPASS=secretPassWord
user@laptop:~/.ssh$ sshpass -e ssh 10.0.200.9.switch -l customer
Type 'help' or '?' to get help.
Switch
这是行不通的:
/home/user/.ssh/config configuration 2
Host bastion
hostname bastion.example.com
port 2222
user root
identityfile /home/user/.ssh/id_rsa
Match host *.switch user customer
ProxyCommand sshpass -e ssh bastion -W $(echo %h | grep -Po '^[0-9.]+[0-9]+' ):%p
更改.ssh/config file
没有任何影响
user@laptop:~/.ssh$ export SSHPASS=secretPassWord
user@laptop:~/.ssh$ ssh 10.0.200.9.switch -l customer
[email protected]'s password:
答案1
我认为在您的配置中,sshpass
ProxyCommand 尝试为将要连接的 SSH 连接提供密码bastion
,而不是为最终连接到交换机的连接提供密码。把sshpass
外部外部ssh
ProxyCommand 似乎有效:
laptop$ export SSHPASS=sshhhh
laptop$ sshpass -e ssh -o'Proxycommand ssh customer@bastion -W final.target.switch:22' blah@blah
由于sshpass
将 SSH 客户端放在一个单独的 tty 中以欺骗它接受自身的密码,因此似乎sshpass
必须在 SSH 客户端之前运行。所以逃避ssh
可能sshpass
行不通ssh/config
。
但应该可以制作一个脚本来运行sshpass
并ssh
带有任何所需的选项。这对我有用,在 中设置了必要的配置~/.ssh/config
,就像您一样:
#/bin/bash
if [ -z "$1" ] ; then echo "usage: $0 <args...>" ; exit 1 ; fi
sshpass -e ssh "$@"
您也可以将用户设置为登录 in .ssh/config
,因此也许无需-l
.另外,它似乎sshpass
不能很好地处理ssh
询问未知的主机密钥,因此可能需要known_hosts
提前设置(或使用)。StrictHostKeyChecking no
答案2
另一种方法是使用 putty 工具中的 plink。看:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 除了可以执行“plink -pw ...”之外,您还可以使用“-m”选项进行远程脚本编写。