我经常必须登录到几个服务器中的一个,然后进入这些机器上的几个目录中的一个。目前我做的事情是这样的:
localhost ~]$ ssh somehost
Welcome to somehost!
somehost ~]$ cd /some/directory/somewhere/named/Foo
somehost Foo]$
我有脚本,可以确定哪个主机和哪个目录,我需要进入,但我不知道如何做到这一点:
localhost ~]$ go_to_dir Foo
Welcome to somehost!
somehost Foo]$
有没有简单、聪明或任何方法可以做到这一点?
不幸的是,建议的解决方案(@rogeriopvl)在使用多个跳时不起作用,所以我找到了另一个。
在远程机器上添加到~/。Bashrc:
[ "x$CDTO" != "x" ] && cd $CDTO
这允许你在命令行上以这样的方式指定所需的目标目录:
ssh -t host1 ssh -t host2 "CDTO=/desired_directory exec bash --login"
当然,这种方式也可以用于单跳。
这个解决方案可以与@redseven的有用提示相结合,以获得更大的灵活性(如果没有$CDTO,则转到保存目录,如果存在的话)。
在我非常具体的情况下,我只是想在一个远程主机上执行一个命令,在一个Jenkins从机的特定目录中:
ssh myuser@mydomain
cd /home/myuser/somedir
./commandThatMustBeRunInside_somedir
exit
但是我的机器不能执行ssh(我想它不能分配伪tty),并让我给出以下错误:
Pseudo-terminal will not be allocated because stdin is not a terminal
我可以绕过这个问题,将“cd to dir + my command”作为ssh命令的参数(不必分配伪终端),并通过传递选项-T显式地告诉ssh命令我不需要分配伪终端。
ssh -T myuser@mydomain "cd /home/myuser/somedir; ./commandThatMustBeRunInside_somedir"