1

有没有办法在访问远程终端之前执行命令

当我输入这个命令时:

bash $> ssh user@server.com 'ls'

ls 命令在远程计算机上执行,但 ssh 退出,我无法在远程会话中继续。

有没有办法保持连接?我问这个的原因是我想为 ssh 会话创建一个设置,而不必修改远程 .bashrc 文件。

4

2 回答 2

2

我会强制分配一个伪 tty,然后在ls命令之后运行 bash:

syzdek@host1$ ssh -t host2.example.com 'ls -l /dev/null;   bash'
-rwxrwxrwx    1 root     other          27 Apr  1  2005 /dev/null
bash-4.1$ 
于 2013-11-01T19:09:49.887 回答
1

您可以尝试在 bash 的 init 文件上使用进程替换。在下面的示例中,我定义了一个函数myfunc

myfunc () {
   echo "Running myfunc"
}

<(...)我将其转换为在构造中回显的正确转义的单行代码,以替换--init-filebash 的参数:

$ ssh -t localhost 'bash --init-file <( echo "myfunc() { echo \"Running myfunc\" ; }" )  '
Password:
bash-3.2$ myfunc
Running myfunc
bash-3.2$ exit

请注意,一旦连接,my.bashrc不是来源,而是myfunc在交互式会话中定义和正确使用。

对于更复杂的 bash 函数来说,这可能有点困难,但它确实有效。

于 2013-11-01T20:50:09.483 回答