我的首选方法是使用SSH配置文件(如下所述),但根据您的用途,有一些可能的解决方案。
命令行参数
我认为这种方法的最佳答案是christianbundy对公认答案的回答:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
使用双引号将允许您使用本地机器中的变量,除非它们被转义(如此处的$SHELL)。或者,你可以使用单引号,你使用的所有变量都将是来自目标机器的变量:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Bash函数
您可以通过将该命令包装在bash函数中来简化它。假设你只想输入这个:
sshcd example.com /foo/bar
你可以通过添加到~/.bashrc来实现:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
如果使用远程机器上存在的变量作为目录,请确保对其进行转义或将其放在单引号中。例如,这将cd到远程机器上存储在JBOSS_HOME变量中的目录:
sshcd example.com \$JBOSS_HOME
SSH配置文件
如果您希望使用普通的ssh命令在特定(或任何)主机上一直看到这种行为,而不必使用额外的命令行参数,您可以在ssh配置文件中设置RequestTTY和RemoteCommand选项。
例如,我只想输入以下命令:
ssh qaapps18
但希望它总是像这样的命令:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
所以我把这个加到~/。ssh /配置文件:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
现在,该规则适用于主机名中包含“apps”的任何主机。
欲了解更多信息,请参见http://man7.org/linux/man-pages/man5/ssh_config.5.html