首页 文章

如何直接ssh到特定目录?

提问于
浏览
180

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

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

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

10 回答

  • 326

    您可以执行以下操作:

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

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


    说明

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

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

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

  • -5

    你可以添加

    cd /some/directory/somewhere/named/Foo
    

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

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

  • 4

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

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

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

  • 18

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

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

  • 2

    我使用环境变量CDPATH

  • 0

    在我非常具体的情况下,我只想在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命令的参数(不必分配Pseudo-terminal)并通过传递选项-T显式告诉ssh命令我没有'需要伪终端分配 .

    ssh -T myuser@mydomain "cd /home/myuser/somedir; ./commandThatMustBeRunInside_somedir"
    
  • -1

    登录后直接进入的另一种方法是创建“别名” . 当您登录系统时,只需键入该别名,您就会进入该目录 .

    示例:Alias = myfolder'/ var / www / Folder'

    登录到别名的系统类型后(这适用于系统的任何部分)
    如果不在bashrc中,此命令将适用于当前会话 . 所以你也可以将这个别名添加到bashrc中以便将来使用它

    $ myfolder =>将您带到该文件夹

  • 45

    -t 的想法更进一步 . 我保留一组脚本调用下面的脚本去我经常访问的主机中的特定位置 . 我将它们全部保存在 ~/bin 中并将该目录保存在我的路径中 .

    #!/bin/bash
    
    # does ssh session switching to particular directory
    # $1, hostname from config file 
    # $2, directory to move to after login
    # can save this as say 'con' then
    # make another script calling this one, e.g.
    # con myhost repos/i2c
    
    ssh -t $1 "cd $2; exec \$SHELL --login"
    
  • 1

    SSH本身提供了一种通信方式,它对目录一无所知 . 既然你可以指定要执行哪个远程命令(这是 - 默认情况下 - 你的shell),我就从那里开始 .

  • 2

    只需使用以下命令修改您的家: usermod -d /newhome username

相关问题