AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1150575
Accepted
Samul
Samul
Asked: 2023-12-29 09:40:01 +0800 CST2023-12-29 09:40:01 +0800 CST 2023-12-29 09:40:01 +0800 CST

在服务器启动时启动 ssh 隧道

  • 772

我正在运行 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

然而它不起作用。我认为它要求输入密码,但没有人输入密码(当然)。那么我该如何解决这个问题呢?

centos
  • 1 1 个回答
  • 71 Views

1 个回答

  • Voted
  1. Best Answer
    Nikita Kipriyanov
    2023-12-29T14:00:39+08:002023-12-29T14:00:39+08:00

    不要对 cron 执行此操作。最好的办法是添加一个systemd服务。例如,对于类似的问题,我使用如下所示的单元文件:

    [Unit]
    Description=forward public port 9944 to local 9922 with SSH
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    ExecStart=ssh -i /root/.ssh/forwarder -g -L 0.0.0.0:9944:localhost:9922 localhost -o ExitOnForwardFailure=yes -N
    Restart=always
    RestartSec=60
    
    [Install]
    WantedBy=multi-user.target
    

    将其另存为/etc/systemd/system/ssh-forward-9944-to-9922.service并执行

    systemctl enable ssh-forward-9944-to-9922.service
    systemctl start ssh-forward-9944-to-9922.service
    

    请注意,我添加了“转发失败时退出”选项,因此如果某些内容声明该端口,systemd 将正确识别该单元失败。另请注意全局绑定选项,它实际上接受来自其他主机的连接,因为尽管您尝试将其绑定到0.0.0.0,但除非您使用 启用它,否则它将不起作用-g。

    最后,您必须正确设置密钥。上面的单元文件的构造使得 ssh 客户端将以 root 身份运行,并且将以 root 身份连接到本地主机PermitRootLogin yes,这意味着您需要在. 私钥必须以未加密的形式存储。公钥应该进入.PermitRootLogin prohibit-passwordwithout-password/etc/ssh/sshd_config/root/.ssh/forwarder/root/.ssh/authorized_keys

    最好是使用专用密钥,生成它

    ssh-keygen -t ed25519 -f /root/.ssh/forwarder
    

    (敲击<Enter>两次没有密码)。然后将公共对应部分的内容附加authorized_keys到

    cat /root/.ssh/forwarder.pub >> /root/.ssh/authorized_keys
    

    编辑/root/.ssh/authorized_keys以严格限制此键(最后一行),类似于以下内容:

    restrict,port-forwarding,command="/bin/false" ssh-ed25519 AA[key contents follows]7b localhost port forwarder
    

    只需在最后一行之前添加这个restrict,...魔法咒语即可。ssh-ed25519 ...您可以进一步增强它,例如添加from="127.0.0.1,::1",permitopen="127.0.0.1:9922",permitopen="[::1]:9922"到限制列表中(尽管我不完全确定此文件中 IPv6 地址的拼写是否正确);阅读man authorized_keys有关此内容的详细信息。

    • 2

相关问题

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • 持续监控许多服务器运行状况的简单方法?

  • Hudson 无法在 tomcat5 中启动

  • CentOS 的依赖挑战

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve