我可以通过 SSH 连接到特定目录吗?

Oli*_*Oli 9 ssh

我每天通过 SSH 连接到许多不同的服务器,其中一些服务器的网站具有不同的文件系统结构。每次我更换服务器时,我都必须弄清楚我要去哪里访问我真正想要的文件(因为我很少想要进入~)。

我使用 Fabric 文件来自动化我的所有操作(推送到 git、自动 SSH 到服务器以从 git 中提取、重新启动 Web 应用程序、更改依赖项等),所以我想知道我是否也不能告诉它我想要SSH 到正确的目录,这样我就可以运行fab ssh并处于正常的 SSH 会话中,就在正确的位置并立即开始工作。

不过,这与 Fabric 无关;请忽略它。Fabric 只是在运行一批命令。我的论点是ssh命令。这就是我要告诉 Fabric 运行的内容。

因此,如何我可以sshcd到上登录一个特定的目录?

注意:这不能是服务器或用户范围的事情。我在某些服务器上的一个用户下有多个网站,因此粘贴某些~/.bashrc内容对我不起作用。

Oli*_*Oli 9

好吧,我知道我可以在登录时运行一些东西,但我知道它会在运行后直接退出。我现在记得的是,我可以在远程服务器上随心所欲地运行。您可以将命令链接在一起!

ssh user@server -t "cd /websites/website ; /bin/bash"
Run Code Online (Sandbox Code Playgroud)

现在我可以告诉 fabric 这样做,我们就走了。简单的。


我确实说过这与 Fabric 无关,但这里也是我的 Fabric 脚本的新部分,基于上述内容:

def ssh():
    ''' SSH into the remote server at the correct directory '''
    local('ssh -t -p%(port)s %(server)s "cd %(remote_dir)s ; /bin/bash"' % {
        'server': server_host,
        'port': server_port,
        'remote_dir': remote_dir,
    })
Run Code Online (Sandbox Code Playgroud)

我对相同的脚本进行符号链接,因此变量 ( server_host,server_portremote_dir) 从站点到站点更改。

因为 Fabric 可以处理出站连接,所以您也可以这样做:

def ssh():
    ''' SSH into the remote server at the correct directory '''
    run('cd %s ; /bin/bash' % remote_dir)
Run Code Online (Sandbox Code Playgroud)

这确实有效,但输出前面带有来自 Fabric 的字符串。这使得提示超过 80 个字符,虽然我有很多分辨率,但这对我来说太多了:)