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

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

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


当前回答

在我非常具体的情况下,我只是想在一个远程主机上执行一个命令,在一个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命令的参数(不必分配伪终端),并通过传递选项-T显式地告诉ssh命令我不需要分配伪终端。

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

其他回答

在我非常具体的情况下,我只是想在一个远程主机上执行一个命令,在一个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命令的参数(不必分配伪终端),并通过传递选项-T显式地告诉ssh命令我不需要分配伪终端。

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

登录后直接进入的另一种方法是创建“别名”。当你登录系统时,只要输入这个别名,你就会在那个目录下。

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

登录到系统后,输入该别名(这可以从系统的任何部分进行) 这个命令如果不在bashrc中,将适用于当前会话。因此,您还可以将这个别名添加到bashrc,以便将来使用它

$ myfolder =>带您到该文件夹

我知道这个问题很久以前就有答案了,但我在尝试将ssh登录合并到bash脚本中时发现了这个问题,登录后运行几个命令,然后注销并继续使用bash脚本。我发现的最简单的方法,在其他地方没有提到,因为它是如此琐碎,就是这样做。

#!/bin/bash

sshpass -p "password" ssh user@server 'cd /path/to/dir;somecommand;someothercommand;exit;'

我的答案可能与你真正想要的不同,但我在这里写的可能对一些人有用。在我的解决方案中,您必须进入该目录一次,然后每个新的ssh会话都将进入相同的目录(在第一次登出之后)。

如何ssh到相同的目录,你已经在你上次登录。 (我假设您在远程节点上使用bash。)

将这一行添加到~/。远程节点上的Bash_logout (!):

echo $PWD > ~/.bash_lastpwd

这些到~/的直线。Bashrc文件(仍然在远程节点上!)

if [ -f ~/.bash_lastpwd ]; then
    cd $(cat ~/.bash_lastpwd)
fi

这样在每次登出时保存当前路径,登录后.bashrc将您放入该目录。

ps:你可以进一步调整它,比如使用SSH_CLIENT变量来决定是否进入该目录,这样你就可以区分本地登录和ssh,甚至不同的ssh客户端。

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