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 和端口号,还觉得理所当然——其实花十分钟配一次,后面省下的时间远不止十分钟。
顶: 97523踩: 3597






评论专区