运行ssh命令并保持连接

时间:2013-11-01 18:56:40

标签: ssh

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

当我输入此命令时:

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

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

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

2 个答案:

答案 0 :(得分: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$ 

答案 1 :(得分:1)

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

myfunc () {
   echo "Running myfunc"
}

我转换为正确转义的单行,在<(...)构造中回显bash的--init-file参数的进程替换:

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

请注意,一旦连接,我的.bashrc就不会被提供,但myfunc已定义,并且可以在交互式会话中正常使用。

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