ssh 更改用户并执行命令

ssh 更改用户并执行命令

这是我的脚本中的命令:

ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt

这些命令单独使用时效果很好,但在脚本中一起使用时就会挂起。

如果你单独运行这个命令,sudo su tom; cat /home/user/file.txt 它只会在你注销用户 tom 时执行 cat。

如何更改用户并在 bash 脚本中执行命令?

答案1

除了 Paul Calabro 建议的内容(我认为这不是您的主要问题)之外,您还应该定义用于在远程计算机上执行命令的命令行解释器(shell),因为可能有与本地主机不同的 shell 。

我想你还需要命令-t的参数ssh

-t 强制伪 tty 分配。这可用于在远程计算机上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个 -t 选项强制 tty 分配,即使 ssh 没有本地 tty。

以下内容应该更接近您正在寻找的内容:

ssh -it $KEY $USER@$HOST 'sudo su tom; echo $DATA >> /home/user/file.txt; bash'

不幸的是,在上面的解决方案中,sudo su&&的“concat”echo仍然不起作用,但是使用命令-c参数su应该修复

-c, --command=COMMAND 使用 -c 将单个 COMMAND 传递到 shell

答案2

这是您指定的命令:

ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt

关于此的一些小注意事项:

  • 如果$KEY$USER$HOST包含空格,该命令将产生意外的行为。 (不太可能。)
  • $DATA在您运行命令的主机上展开ssh,而不是在您远程登录的主机上展开。 (我假设这就是您的意图。)
  • "您的命令末尾缺少结束语。我假设这是一个复制粘贴错误。

现在关于这个命令的要点,以及解决您的问题的命令:

sudo不仅仅用于将命令运行为root. 它是用于的,我引用手册页:

sudo, sudoedit - execute a command as another user

所以,你想要的简单命令是:

ssh -i $KEY $USER@$HOST "sudo -u tom echo $DATA >> /home/user/file.txt"

这假设$USER具有写入权限/home/user/file.txt。如果只有tom拥有这些权限的人,则使用:

ssh -i $KEY $USER@$HOST "sudo -u tom -i 'echo $DATA >> /home/user/file.txt'"

有关更多信息,请阅读man sudo.

答案3

我无法切换用户,以 root 身份执行似乎可以解决问题。

ssh -i $KEY $USER@$HOST "echo "$DATA" |sudo tee $DIRECTORY"

相关内容