我需要将cd
命令与ssh
跳转主机连接起来:
:~$ ssh -tt -C -X user1@server ssh -tt -C -X user2@host "cd ~/my/work/directory ; bash"
但我收到以下错误:
bash: line 0: cd: /home/user1/my/work/directory: No such file or directory
Connection to host closed.
似乎 ssh 尝试移动到/my/work/directory
服务器机器中。因此我尝试~/
用完整路径替换/home/user2
,但出现相同的错误:
Connection to host closed.
在这两种情况下,ssh 都将我从客户端主目录带到服务器主目录。我还尝试通过两个不同的步骤(客户端 -> 服务器服务器 -> 主机)跳转主机,并且成功了。似乎该cd
步骤是在第一个 ssh(客户端 -> 服务器)中完成的,而不是在第二个 ssh(服务器 -> 主机)中完成的。
你有什么建议吗?
答案1
第一个 ssh 将其解释为应运行的两个单独命令的列表。您的 ssh 会话server
首先执行ssh -tt -C -X user2@host
,然后立即退出,然后运行cd ~/my/work/directory ; bash
。您需要做的是从第二个 ssh 的开头到命令的结尾引用整个所有内容,以便将其视为单个内容。
ssh -tt -C -X user1@server 'ssh -tt -C -X user2@host "cd ~/my/work/directory ; bash"'
这样,当您 ssh 进入时,server
它将ssh -tt -C -X user2@host "cd ~/my/work/directory ; bash"
作为整个命令执行,而不是将其分成几个部分。