我已经进行了设置,以便可以从笔记本电脑通过 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-password
于sshd_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
- 你满足你的要求
- 您重新连接会话
- 你学习屏幕