SSH 是远程管服务器的命脉,这篇讲透密钥登录。
首次连接:指纹确认
ssh root@3.15.231.19
The authenticity of host '3.15.231.19' can't be established.
ED25519 key fingerprint is SHA256:xxxx.
Are you sure you want to continue connecting (yes/no)?
输 yes 把服务器指纹存到 ~/.ssh/known_hosts,下次变了会警告(防中间人)。
密钥登录原理
对称:密码每次都要输,还可能被爆破。非对称:本地生成一对钥匙,公钥放服务器,私钥自己留着。登录时服务器出题,私钥答题,答对进门——私钥从不离身。
ssh-keygen -t ed25519 -C "my-vps"
一路回车,~/.ssh/ 下多出 id_ed25519(私钥,chmod 600)和 id_ed25519.pub(公钥)。
ssh-copy-id root@3.15.231.19
一把梭把公钥送上服务器。下次 ssh 直接进,不用输密码。
禁密码登录加固
sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
sudo systemctl restart sshd
改之前先开一个已连上的终端别关,确认密钥能进再退,免得把自己锁外面。
scp / rsync 传文件
scp backup.tar.gz root@3.15.231.19:/tmp/
scp -r ./site root@3.15.231.19:/var/www/
rsync -avz --progress ./site/ root@3.15.231.19:/var/www/site/
rsync 增量同步,大文件断点续传比 scp 稳。
~/.ssh/config 写别名
Host vps
HostName 3.15.231.19
User root
IdentityFile ~/.ssh/id_ed25519
以后 ssh vps 就行,还能配跳板机 ProxyJump。
实战:连不上四种报错
Connection refused:sshd 没跑或防火墙挡了
Permission denied (publickey):公钥没放对地方,查 ~/.ssh/authorized_keys 权限 600
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED:服务器重装了,ssh-keygen -R 删旧指纹
Connection timed out:IP 错了或安全组没放行 22
小结
下一篇 L11:Shell 脚本入门——变量、if、for,写出第一个备份脚本。