当前位置:首页 > 时尚

linux跳转另外一个服务器

SSH 就是转外日常最顺手的工具。打开终端,个服敲一行 ssh user@192.168.1.100,转外回车,个服输密码,转外你就站在另一台机器上了。个服整个过程不到五秒。转外我第一次用的个服时候觉得挺神奇——明明坐在自己的笔记本前,命令行却已经在跑对面那台服务器的转外进程了。

但这里面有几个坑,个服踩过一次就忘不了。转外

密码登录迟早要换掉

默认用密码认证,个服每次连都要输一长串。转外更麻烦的个服是,如果你需要频繁跳转,转外比如从本地跳到 A 服务器,再从 A 跳到 B 服务器,密码输到手软。而且密码登录本身不安全,暴力破解每天都在发生。我自己的做法是生成密钥对:

ssh-keygen -t ed25519 -C "mykey" ssh-copy-id user@192.168.1.100

把公钥扔到目标服务器的 ~/.ssh/authorized_keys 里,之后登录就不需要密码了。私钥留在本地,千万别拷来拷去。有人图省事把私钥复制到每一台服务器上,这等于把家门钥匙藏在门口地毯下面。

跳板机的正确姿势

很多公司内网不允许直接 SSH 到生产机器,中间必须过一台跳板机。传统做法是先 ssh 到跳板机,再从跳板机 ssh 到目标机。两跳,两套密码,烦。

OpenSSH 从 7.3 版本开始支持 -J 参数,一条命令搞定:

ssh -J jumpuser@jump.example.com targetuser@10.0.0.5

本地直接穿透到内网机器,中间那跳完全透明。如果你经常连同一台目标机,把它写进 ~/.ssh/config:

Host target HostName 10.0.0.5 User deploy ProxyJump jumpuser@jump.example.com

以后只需要 ssh target,四个字母,完事。

文件怎么过去

登录进去只是第一步。传文件用 scp 或 rsync。小文件 scp 够用:

scp ./app.log user@192.168.1.100:/var/log/

大目录、需要断点续传、需要排除某些文件的时候,rsync 更靠谱:

rsync -avz --exclude='node_modules' ./project/ user@192.168.1.100:/opt/project/

那个 -z 是压缩传输,跨公网的时候能省不少时间。我传过一个 2GB 的数据库备份,压缩后大概 400MB,几分钟就过去了。

端口转发偶尔能救命

有些服务只监听 127.0.0.1,比如内部的 Grafana 面板或者 Redis。你没法直接访问,但可以通过 SSH 隧道把远程端口映射到本地:

ssh -L 3000:localhost:3000 user@192.168.1.100

执行之后,本地打开 localhost:3000,流量自动穿过 SSH 隧道到达远程机器的 3000 端口。调试内部服务的时候特别管用,不需要改任何防火墙规则。

保持连接不断开

SSH 连接闲置几分钟就断,这个体验很糟糕。在本地 ~/.ssh/config 里加两行:

Host * ServerAliveInterval 60 ServerAliveCountMax 3

每 60 秒发一个心跳包,连续 3 次没响应才断开。基本上不会再遇到敲了半天命令结果发现连接已经挂了的情况。

说到底,SSH 跳转服务器这件事,核心就是密钥认证加配置文件。把常用的几台机器写进 config,用别名代替 IP 和用户名,日常操作会快很多。我见过有人每次手敲完整 IP 和端口号,还觉得理所当然——其实花十分钟配一次,后面省下的时间远不止十分钟。

分享到: