有没有办法在访问远程终端之前执行命令
当我输入此命令时:
bash
$> ssh user@server.com 'ls'
ls命令在远程计算机上执行,但ssh退出,我无法在远程会话中继续。
有没有办法保持联系?我问这个的原因是我想为ssh会话创建一个设置,而不必修改远程.bashrc文件。
答案 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函数来说可能有点困难,但它确实有效。