我正在运行 Centos 流,每次启动服务器后我都必须运行此命令行:
ssh -L 0.0.0.0:9944:localhost:9922 localhost -N
运行此命令后,操作系统将要求我以 root 身份登录(即使我已经以 root 身份登录),之后一切正常。
我的问题:我想在重新启动时将此代码添加到 cronjob 中,例如:
@reboot root ssh -L 0.0.0.0:9944:localhost:9922 localhost -N
然而它不起作用。我认为它要求输入密码,但没有人输入密码(当然)。那么我该如何解决这个问题呢?
不要对 cron 执行此操作。最好的办法是添加一个systemd服务。例如,对于类似的问题,我使用如下所示的单元文件:
将其另存为
/etc/systemd/system/ssh-forward-9944-to-9922.service
并执行请注意,我添加了“转发失败时退出”选项,因此如果某些内容声明该端口,systemd 将正确识别该单元失败。另请注意全局绑定选项,它实际上接受来自其他主机的连接,因为尽管您尝试将其绑定到
0.0.0.0
,但除非您使用 启用它,否则它将不起作用-g
。最后,您必须正确设置密钥。上面的单元文件的构造使得 ssh 客户端将以 root 身份运行,并且将以 root 身份连接到本地主机
PermitRootLogin yes
,这意味着您需要在. 私钥必须以未加密的形式存储。公钥应该进入.PermitRootLogin prohibit-password
without-password
/etc/ssh/sshd_config
/root/.ssh/forwarder
/root/.ssh/authorized_keys
最好是使用专用密钥,生成它
(敲击
<Enter>
两次没有密码)。然后将公共对应部分的内容附加authorized_keys
到编辑
/root/.ssh/authorized_keys
以严格限制此键(最后一行),类似于以下内容:只需在最后一行之前添加这个
restrict,...
魔法咒语即可。ssh-ed25519 ...
您可以进一步增强它,例如添加from="127.0.0.1,::1",permitopen="127.0.0.1:9922",permitopen="[::1]:9922"
到限制列表中(尽管我不完全确定此文件中 IPv6 地址的拼写是否正确);阅读man authorized_keys
有关此内容的详细信息。