有没有办法在访问远程终端之前执行命令
当我输入这个命令时:
bash
$> ssh user@server.com 'ls'
ls 命令在远程计算机上执行,但 ssh 退出,我无法在远程会话中继续。
有没有办法保持连接?我问这个的原因是我想为 ssh 会话创建一个设置,而不必修改远程 .bashrc 文件。
有没有办法在访问远程终端之前执行命令
当我输入这个命令时:
bash
$> ssh user@server.com 'ls'
ls 命令在远程计算机上执行,但 ssh 退出,我无法在远程会话中继续。
有没有办法保持连接?我问这个的原因是我想为 ssh 会话创建一个设置,而不必修改远程 .bashrc 文件。
我会强制分配一个伪 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$
您可以尝试在 bash 的 init 文件上使用进程替换。在下面的示例中,我定义了一个函数myfunc
:
myfunc () {
echo "Running myfunc"
}
<(...)
我将其转换为在构造中回显的正确转义的单行代码,以替换--init-file
bash 的参数:
$ 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 函数来说,这可能有点困难,但它确实有效。