ssh 等待提示并退出

ssh 等待提示并退出

我想要实现的是在跳转服务器后面的两台服务器上测试 ssh 连接。要求是实际加载 shell(提示),然后退出服务器(连接)。首先我尝试过:

ssh -A -t [email protected] \
"command1; ssh user1@server1 exit; ssh user2@server2 exit"

在加载提示符(shell)之前,它会连接并立即退出 ssh 连接。我找到了解决方法:

ssh -A -t [email protected] \
"command1; ssh user1@server1 <<EOF
EOF
ssh user2@server2 <<EOF
EOF
"

通过使用 EOF,它实际上需要一些命令,因此等待提示,并且由于没有提示,因此退出。

有更好/更好的方法来实现我的目标吗?

答案1

有一种替代方法称为.ssh/config

创建一个名为 .ssh/config 的文件,并进行以下编辑

Host Server-Jump-*
    User username
    IdentityFile ~/.ssh/id_rsa # -- if you want to provide key
    ForwardAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 12

Host Server1 
    Hostname 21.19.6.19
    Port 2222

Host Server2 
    Hostname Server2-IP
    Port 22
    ProxyCommand ssh -W %h:%p Server1 

保存此文件。

现在尝试下面的命令

ssh Server2

proxy命令部分说明

-W host:port
             Requests that standard input and output on the client be forwarded to host on port over the secure channel.  Implies -N, -T, ExitOnForwardFailure and ClearAllForwardings.  Works
             with Protocol version 2 only.

`%h` Host name to connect 
`%p` Port name to connect 

答案2

由于我不想为此使用配置文件,因为这将被更多人在几台计算机上使用(不想每次进行更改时都更新所有内容),所以我得出了这个解决方案:

ssh -A -t user@server1 \
"command1
echo -e "command2" | ssh user1@server2
echo -e "command3" | ssh user2@server3"

这让我以良好的格式得到了我需要的准确输出

答案3

显然,这是一个全自动的连接退出过程,您不需要来自标准输入的任何内容。那么,为什么不关闭标准输入呢?

<&- ssh -A -t [email protected] "
    command1
    ssh user1@server1
    ssh user2@server2
"

command1如果由于 stdin 关闭而出现奇怪的错误,您可以替换<&-< /dev/null

相关内容