Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux cd到目录,su到脚本中远程服务器上的特定用户_Linux_Bash_Ubuntu_Ssh_Command Line Interface - Fatal编程技术网

Linux cd到目录,su到脚本中远程服务器上的特定用户

Linux cd到目录,su到脚本中远程服务器上的特定用户,linux,bash,ubuntu,ssh,command-line-interface,Linux,Bash,Ubuntu,Ssh,Command Line Interface,每两周我都要在办公室的远程Ubuntu CLI服务器上执行一些任务。我通常会一个接一个地输入命令,但我正试图找到一种方法(也许写一个脚本?)来减少重复这些第一步的时间 以下是我的工作: ssh my_username@my_local_server # asks for my_username password cd /path/to/particular/folder su particular_user_on_local_server # asks for particular_user_o

每两周我都要在办公室的远程Ubuntu CLI服务器上执行一些任务。我通常会一个接一个地输入命令,但我正试图找到一种方法(也许写一个脚本?)来减少重复这些第一步的时间

以下是我的工作:

ssh my_username@my_local_server
# asks for my_username password
cd /path/to/particular/folder
su particular_user_on_local_server
# asks for particular_user_on_local_server password
然后我可以完成我的任务(在Rails应用程序上运行一些Ruby脚本、复制/删除文件、重新启动服务等)

我正试图通过一步脚本/命令找到实现这一点的方法:

ssh
connect然后
cd
到目录,然后
su
到该用户”

我尝试使用以下方法:

ssh username@server 'cd /some/path/to/folder ; su other_user'
# => does not keep my connection open to the server, just execute my `cd` 
#   and then tells me `su: must be run from terminal`
ssh username@server 'cd /some/path/to/folder ; bash ; su other_user'
# => keeps my connection open to the server but doesn't switch to user
#    and I don't see the usual `username:~/current/folder` prefix in the CLI

有没有一种方法可以通过
ssh
打开远程服务器上的终端(保持连接),并自动将目录+开关更改为特定的?(为了让事情变得更难,我使用了Yakuake)

sudo-H
保留当前的工作目录,因此您可以执行以下操作:

ssh -t login_user@host.com 'cd /path/to/dir/; sudo -H -u other_user bash'

需要
ssh
-t
参数,否则第二个sudo将无法询问您的密码。

sudo-H
保留当前工作目录,因此您可以执行以下操作:

ssh -t login_user@host.com 'cd /path/to/dir/; sudo -H -u other_user bash'

需要
ssh
-t
参数,否则第二个sudo将无法询问您的密码。

您可以使用
-t
强制分配一个伪终端,更改到所需的目录,然后将shell替换为您所需的用户:

ssh -t username@server 'cd /some/path/to/folder && exec bash -c "su other_user"'

您可以使用
-t
强制分配伪终端,更改到所需目录,然后将shell替换为所需用户所在的目录:

ssh -t username@server 'cd /some/path/to/folder && exec bash -c "su other_user"'

您为什么要在
su
之前使用
cd
?另一种选择会更容易,因为没有选项的
su
可能会更改当前目录。这是一个非常好的观点@Aaron,谢谢你指出。你为什么在
su
之前要
cd
?另一种选择会更简单,因为不带选项的su可能会更改当前目录。这是一个非常好的观点@Aaron,感谢您指出这一点。非常感谢您的回答。我正在尝试改进我的脚本,现在我正在提示目标目录(在使用路径
cd
后追加,如果存在)。但是,如果我输入的目录在此位置不存在,则整个连接将停止。由于“没有这样的文件或目录”错误,
cd
失败后,是否有办法保持连接?这是因为
和&
的原因。如果要忽略
cd
命令的退出状态,可以用
替换
&&
您将收到一条关于不存在目录的错误消息,但是无论如何都会执行
bash-c
。非常感谢您的回答。我正在尝试改进我的脚本,现在我正在提示目标目录(在使用路径
cd
后追加,如果存在)。但是,如果我输入的目录在此位置不存在,则整个连接将停止。由于“没有这样的文件或目录”错误,
cd
失败后,是否有办法保持连接?这是因为
和&
的原因。如果要忽略
cd
命令的退出状态,可以用
替换
&&
会得到一条关于不存在的目录的错误消息,但是仍然会执行
bash-c