如何通过 SSH 传输需要 sudo 的别名?

如何通过 SSH 传输需要 sudo 的别名?

我已经进行了设置,以便可以从笔记本电脑通过 SSH 安全地连接到我的家用电脑。今天,我尝试运行更新只是为了测试,但我无法从笔记本电脑上执行此操作。

我基本上想做的是将命令传递到机器而不通过 SSH 连接到机器,同时不保持连接处于活动状态。我尝试在网上查找是否可以找到一些东西,但似乎没有任何效果。

这些是我尝试过的命令:

$ ssh myip 'sysupg &'
bash: sysupg: command not found
echo "mypassword" | ssh myip 'sudo -S dnf upgrade -y &'
[sudo] password for myuser:
sudo: no password was provided
sudo: a password is required
echo "mypassword" | ssh myip 'sudo -S -k dnf upgrade -y &'
[sudo] password for myuser:
sudo: no password was provided
sudo: a password is required

当它要求我输入密码 ( [sudo] password for myuser:) 时,它不允许我输入任何内容,只是继续,给我最后两个sudo错误。

总而言之:sudo将需要通过的命令传递ssh到另一台计算机,在传递命令后立即“自动”关闭连接,并且如果可能,在 x 分钟内执行该命令。

答案1

可能的方式:

ssh -t myip 'sudo -b dnf upgrade -y >/tmp/aa 2>&1'
  • 您希望任务在断开连接时运行;使用1>2>重定向
  • 您希望您的任务在后台运行;使用sudo -b选项
  • 您想要ssh提供交互性sudo;使用ssh -t选项

其他可能但不推荐的方式:

echo PASSWORD | ssh myip 'sudo -S -b dnf upgrade -y >/tmp/aa 2>&1'
  • 您想sudo在标准输入上读取密码;使用sudo -S选项代替ssh -t
  • 命令历史记录中有明文密码是错误的

您错过了该sudo -b选项,因为它&会提示密码在后台运行,而不是您唯一想要的任务。

此外,丢失1>2>重定向会保留 ssh 连接。

但是,如果您使用PubkeyAuthentication,一个安全的方法是:

ssh root@myip 'dnf upgrade -y >/tmp/aa 2>&1 &'
  • 设置PermitRootLogin prohibit-passwordsshd_conf
  • 将您的公钥复制到/root/.ssh/authorized_keys
  • 始终保护您的私钥密码,并使用ssh-agent

screen但是,最好的方法是在服务器端使用:

ssh -t myip screen -RD
sudo -s
...whatever...
Ctrl-A d (detach and disconnect)

稍后,重新连接会话:

ssh -t myip screen -RD
  • 你满足你的要求
  • 您重新连接会话
  • 你学习屏幕

相关内容