Linux cd到目录,su到脚本中远程服务器上的特定用户
每两周我都要在办公室的远程Ubuntu CLI服务器上执行一些任务。我通常会一个接一个地输入命令,但我正试图找到一种方法(也许写一个脚本?)来减少重复这些第一步的时间 以下是我的工作: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
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
。