cd到目录,su到脚本

时间:2017-04-24 15:36:53

标签: 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_on_local_server password

然后我可以完成我的任务(在Rails应用程序上运行一些Ruby脚本,复制/删除文件,重启服务等)。

我试图在一步脚本/命令中找到一种方法:

  

" ssh然后将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)

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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