我经常必须登录到几个服务器中的一个,然后进入这些机器上的几个目录中的一个。目前我做的事情是这样的:

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]$

有没有简单、聪明或任何方法可以做到这一点?


当前回答

简单地修改你的家命令: Usermod -d /newhome用户名

其他回答

连接用户

In case if you don't know this, you can use this to connect by specifying both user and host
ssh -t <user>@<Host domain / IP> "cd /path/to/directory; bash --login"

例如:ssh -t admin@test.com "cd public_html;bash——登录”

您还可以在每次登录时通过在双引号中使用a;每次命令前

不幸的是,建议的解决方案(@rogeriopvl)在使用多个跳时不起作用,所以我找到了另一个。 在远程机器上添加到~/。Bashrc:

[ "x$CDTO" != "x" ] && cd $CDTO

这允许你在命令行上以这样的方式指定所需的目标目录:

ssh -t host1 ssh -t host2 "CDTO=/desired_directory exec bash --login"

当然,这种方式也可以用于单跳。

这个解决方案可以与@redseven的有用提示相结合,以获得更大的灵活性(如果没有$CDTO,则转到保存目录,如果存在的话)。

根据@rogeriopvl的回答,我建议如下:

ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && bash"

使用&&链接命令将使下一个命令只在前一个命令成功时运行(与使用;相反,它按顺序执行命令)。当需要cd到执行该命令的目录时,这特别有用。

想象一下这样做:

/home/me$ cd /usr/share/teminal; rm -R *

目录teminal不存在,这导致您停留在主目录中,并使用以下命令删除其中的所有文件。

如果你使用&&:

/home/me$ cd /usr/share/teminal && rm -R *

如果找不到目录,该命令将失败。

我使用环境变量CDPATH

您可以执行以下操作:

ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted ; bash --login"

这样,您将在directory_wanted上获得一个登录shell。


解释

-t强制伪终端分配。这可以用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。 多个-t选项强制分配tty,即使ssh没有本地tty。

如果不使用-t,则不会出现提示。 如果你不加;Bash则连接将被关闭,并将控制权返回到本地计算机 如果你不添加bash——login,那么它将不会使用你的配置,因为它不是一个登录shell