跳到正文

远程机器 ​

SSH 既是登录工具,也是把命令、文件、端口带到另一台机器上的通道。

执行命令 ​

写法在哪里执行
ssh host ls远端 ls,本地不展开
ssh host 'ls | wc -l'整条管道在远端
ssh host "ls $dir"本地先展开 $dir
ssh -t host cmd分配伪终端

引号归属是这里最容易错的地方:双引号本地展开,单引号远端展开。

密钥 ​

bash
ssh-keygen -a 100 -t ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@host
项要求
私钥权限600
.ssh 目录700
公钥位置远端 ~/.ssh/authorized_keys
主机指纹首次连接写入 known_hosts
passphrase用 ssh-agent 缓存

权限或指纹检查不通过时,ssh 会直接拒绝连接,不会降级成警告。

config ​

ini
Host vm
    User alice
    HostName 172.16.174.141
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
字段作用
Host别名,支持通配
HostName真实地址
User / Port登录信息
IdentityFile私钥路径
LocalForward本地端口转发
ControlMaster复用连接

scp、rsync、mosh 都读这份配置。

传文件 ​

工具特点
scp简单,整文件复制
rsync增量、可续传、可排除
mosh断线恢复,UDP

传目录和传文件只差一个结尾的斜杠,但结果完全不同。

bash
rsync -av --partial src/ host:/srv/app/

src/ 复制目录内容,src 复制目录本身。

端口与跳板 ​

bash
ssh -N -f -L 9999:localhost:8888 vm
ssh -J jump host
选项作用
-L本地端口转发
-R远端端口转发
-DSOCKS 代理
-J经过跳板机
-N不执行命令
-f后台运行

没有 tty 的环境不会分配伪终端,需要交互时加 -t。