当前位置:  开发笔记 > 编程语言 > 正文

如何直接ssh到特定目录?

如何解决《如何直接ssh到特定目录?》经验,为你挑选了5个好方法。

我经常需要登录到几台服务器中的一台并转到这些机器上的几个目录中的一个.目前我做了这样的事情:

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

有一个简单,聪明或任何方式来做到这一点?



1> rogeriopvl..:

您可以执行以下操作:

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

这样,您将在directory_wanted上获得一个shell.


说明

-t强制伪终端分配.这可以用于在远程机器上执行任意基于屏幕的程序,这可以是非常有用的,例如在实现菜单服务时.

-t即使ssh没有本地tty,多个选项也会强制tty分配.

如果您不使用,-t则不会出现提示.

如果不添加,; bash则连接将关闭并将控制权返回给本地计算机


你通常需要一个登录shell:`ssh -t example.com"cd/foo/bar; exec\$ SHELL -l"`
在我的情况下 - 缺少的部分
我必须这样做:`ssh -t xxx.xxx.xxx.xxx"cd/directory_wanted && exec\$ SHELL"`
只是想链接[在ssh登录时自动更改目录 - 服务器故障](http://serverfault.com/a/215051); 从那里粘贴这个命令(这是@christianbundy的版本):`ssh server -t"cd/my/remote/directory; bash --login"`
使用这种方法时,没有读取.bash_profile,有谁知道为什么?

2> Chris Lutz..:

你可以添加

cd /some/directory/somewhere/named/Foo

到另一台主机上的.bashrc文件(或.profile其他任何名称).这样,无论你做什么或ssh来自哪里,每当你登录到那台服务器时,它都会cd到你正确的目录,而你所要做的就是ssh正常使用.

诅咒,rogeriopvl的解决方案也有效,但它有点冗长,你必须记住每次都这样做(除非你做一个别名)所以它看起来有点"有趣".



3> christianbun..:

我已经连续创建了一个SSH和CD到服务器的工具 - 恰当地命名为sshcd.对于您给出的示例,您只需使用:

sshcd somehost:/some/directory/somewhere/named/Foo

如果您有任何疑问或问题,请告诉我!



4> Bas Peeters..:

基于对@ 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 *

找不到目录后,该命令将失败.



5> Drew..:

我的首选方法是使用SSH配置文件(如下所述),但是根据您的使用情况,有几种可能的解决方案。

命令行参数

我认为此方法的最佳答案是christianbundy对已接受答案的答复:

ssh -t example.com "cd /foo/bar; exec \$SHELL -l"

使用双引号将允许您使用本地计算机中的变量,除非将它们转义(如此$SHELL处所示)。或者,您可以使用单引号,并且所有使用的变量都是目标计算机上的变量:

ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
重击功能

您可以通过将命令包装在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配置文件中设置RequestTTYRemoteCommand选项。

例如,我只想输入以下命令:

ssh qaapps18

但希望它始终像以下命令一样运行:

ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'

所以我将其添加到我的~/.ssh/config文件中:

Host *apps*
    RequestTTY yes
    RemoteCommand cd $JBOSS_HOME; exec $SHELL

现在,此规则适用于主机名中带有“ apps”的任何主机。

有关更多信息,请参见http://man7.org/linux/man-pages/man5/ssh_config.5.html

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有