我每天都会通过 SSH 访问大量不同的服务器,其中一些服务器的网站文件系统结构不同。每次更换服务器时,我都必须弄清楚要从哪里获取我真正想要的文件(因为我很少想访问~
)。
我使用 Fabric 文件来自动化我的所有操作(推送到 git、自动通过 SSH 连接到服务器以从 git 拉取、重新启动 Web 应用程序、更改依赖项等),所以我想知道我是否不能告诉它我想通过 SSH 进入正确的目录,这样我就可以运行fab ssh
并进入正常的 SSH 会话,就在正确的位置并立即开始工作。
不过,这与 Fabric 无关;请忽略它。Fabric 只是在运行一批命令。我的论点是命令ssh
。这就是我要告诉 Fabric 运行的内容。
那么我如何在登录时ssh
进入cd
特定目录?
注意:不能是服务器或用户范围内的事情。我在某些服务器上的一个用户下有多个网站,因此将某些东西插入其中~/.bashrc
对我来说不起作用。
答案1
我知道我可以在登录时运行某些东西,但我知道运行后它会立即退出。我现在记得的是,我可以在远程服务器上随意运行。您可以将命令链接在一起!
ssh user@server -t "cd /websites/website ; /bin/bash"
现在我只要告诉 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,
})
我对同一个脚本进行符号链接,因此变量(server_host
,server_port
和remote_dir
)在不同站点间变化。
因为 Fabric 可以处理出站连接,所以您也可以这样做:
def ssh():
''' SSH into the remote server at the correct directory '''
run('cd %s ; /bin/bash' % remote_dir)
这确实有效,但输出前面添加了来自 Fabric 的字符串。这使得提示符长度超过 80 个字符,虽然我有很多解析度,但这对我来说太过分了 :)