ssh 配置无需输入密码

ssh 配置无需输入密码

这里的目标是只能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

我认为在您的配置中,sshpassProxyCommand 尝试为将要连接的 SSH 连接提供密码bastion,而不是为最终连接到交换机的连接提供密码。把sshpass 外部外部sshProxyCommand 似乎有效:

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

但应该可以制作一个脚本来运行sshpassssh带有任何所需的选项。这对我有用,在 中设置了必要的配置~/.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”选项进行远程脚本编写。

相关内容