ssh 以用户身份登录并更改为 root,无需 sudo

spa*_*17X 6 ssh su

我有以下任务:

  • 该命令必须通过 ssh 在 bash 脚本中以 root 身份在服务器上远程运行,并且必须在变量中获取命令输出。
  • 以 root 身份通过 ssh 登录已被禁用。
  • 服务器上的 sudo 被禁用,所以我必须使用 su。
  • 编辑:因为我想在 bash 中使其尽可能自动化,所以密码必须存储在命令内

我用谷歌搜索了好几天,但似乎找不到解决方案。

这里提出的解决方案:ssh到服务器并切换用户并更改目录

    ssh -t username@hostname "sudo su - otheruser -c \"cd /path/to/directory && command\""
Run Code Online (Sandbox Code Playgroud)

不起作用,因为 sudo 在服务器上被禁用:

有人有解决办法吗?

Gir*_*fer 5

通过 SSH 登录(作为非特权用户),然后运行不带任何参数的命令su以更改为 root 用户。您将需要 root 密码才能执行此操作。然后运行您想要运行的任何命令。
编辑:如果您想在一行中完成此操作,您可以使用以下命令:
ssh username@hostname "su -c \"code_here\""
如果这不起作用,请确保通过passwd以 root 身份运行来启用 root 密码。这将要求您输入新的 root 密码。
额外:要以除 root 之外的其他用户身份运行命令(请注意,这需要目标用户的密码):
ssh username@hostname "su - username_of_target -c \"code_here\""


小智 4

也许有些偏离主题,但这可以通过 Python 和paramiko模块来实现:

#!/usr/bin/python2
import time
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('127.0.0.1', port=22, username='user', password='pass')

stdin, stdout, stderr = ssh.exec_command('su')
time.sleep(0.1) # some enviroment maybe need this.
stdin.write('root_password_goes_here\n')

[ add extra code here to execute a command ]

stdin.flush()
print (stdout.readlines())
ssh.close()
Run Code Online (Sandbox Code Playgroud)

应该注意的是,从安全角度来看,将密码存储在脚本中通常是一个坏主意。确保您为脚本设置了适当的权限(例如 chmod 740)