1. 前提准备:获取实例信息与权限
作为运维,首先确认三项:云提供商(AWS/GCP/Azure/其它)、实例公网IP或公网DNS、以及登录凭证(私钥.pem、用户名或密码)。如果是AWS EC2,要确认Key Pair文件(.pem);GCP可使用gcloud或在VM实例页面注入SSH公钥;Azure可在创建时设置SSH公钥或用户名/密码。
2. 本地环境准备:SSH客户端与权限
Linux/Mac自带ssh;Windows推荐使用新版Windows Terminal(自带OpenSSH)或PuTTY。将.pem文件权限设置为600或400:chmod 400 mykey.pem。若使用PuTTY,需要用PuTTYgen把.pem转为.ppk。
3. 通过SSH登录(Linux/Unix实例)
通用命令:ssh -i /path/to/mykey.pem username@PUBLIC_IP。常见username:ubuntu(Ubuntu AMI)、ec2-user(Amazon Linux)、root(部分镜像)。示例:ssh -i ~/keys/mykey.pem ubuntu@3.123.45.67。若非默认端口:ssh -p 2222 -i key.pem user@ip。
4. Windows实例登录(RDP)
在AWS:获取Public IP,在EC2控制台点击“Connect → RDP client”,下载远程桌面文件并使用解密得到的Administrator密码登录。解密步骤:使用.pem在控制台或CLI上获取Windows管理员密码。确保安全组开放3389端口(或使用跳板机/Session Manager)。
5. 浏览器控制台与Cloud Shell
很多云提供商提供基于浏览器的终端(AWS Systems Manager Session Manager、GCP Cloud Shell、Azure Cloud Shell)。优点:无需公开端口或私钥,适合快速排查。要使用AWS Session Manager,需要安装SSM Agent并配置IAM角色。
6. 常见登录失败与排查步骤
遇到“Permission denied (publickey)”:确认私钥权限、用户名是否正确、实例已加载对应公钥;“Connection timed out”:安全组/防火墙未开放端口或实例没有公网IP;“Host key verification failed”:删除~/.ssh/known_hosts中对应行再尝试(ssh-keygen -R ip_or_host)。
7. SSH常用选项与优化
常用参数:-o StrictHostKeyChecking=no(首次快速连接但不推荐长期使用);-A 启用ssh-agent转发;使用ssh -vvv user@ip查看详细调试信息。建议在~/.ssh/config添加条目:Host us-prod HostName 3.123.45.67 User ubuntu IdentityFile ~/.ssh/mykey.pem Port 22
8. 免密登录与ssh-agent/Pageant
在本地启用ssh-agent:eval "$(ssh-agent -s)"; ssh-add ~/.ssh/mykey.pem。Windows上使用Pageant配合PuTTY。这样可避免频繁输入私钥密码,并支持多跳(ProxyJump/ProxyCommand)。
9. 端口转发与跳板机(Bastion)
若实例没有公网IP,常见做法是通过跳板机:ssh -J user@bastion user@private-ip 或本地端口转发 ssh -L 5901:localhost:5901 -i key.pem user@bastion,将远程服务映射到本地端口。确保跳板机安全组允许你的公网IP访问。
10. 文件传输:scp、rsync、sftp
scp示例:scp -i key.pem localfile.txt ubuntu@3.123.45.67:/home/ubuntu/。rsync更适合大文件与增量:rsync -avz -e "ssh -i key.pem" ./localdir ubuntu@ip:/home/ubuntu/。使用sftp可交互式传输文件。
11. 常用系统排查命令(入门速查)
更新与安装:sudo apt update && sudo apt upgrade。查看进程:ps aux | grep name,系统负载:top 或 htop。查看磁盘:df -h,查看目录大小:du -sh /var/log/*。网络:ss -tuln 或 netstat -tuln,ping、traceroute、curl -I http://localhost。
12. 服务管理与日志查看
Systemd:sudo systemctl status nginx,启动:sudo systemctl start service,重载:sudo systemctl restart service。日志:sudo journalctl -u service -f 或 tail -n 200 /var/log/syslog。对于容器:docker ps,docker logs -f container_id。
13. 安全建议与硬化步骤
建议禁用root直接登录(/etc/ssh/sshd_config PermitRootLogin no),改用非默认端口并结合fail2ban限制暴力破解;使用密钥登录并禁用密码认证(PasswordAuthentication no)。定期更换密钥并使用MFA或云厂商的私有CA。
14. 自动化与批量管理技巧
使用Ansible、Terraform做配置与部署,Ansible的inventory可指定私钥和用户。对于大量实例,推荐配置跳板机并通过Inventory分组管理,避免逐台手工登录。
15. 常见运维脚本片段与示例
示例:批量执行命令:for ip in $(cat ips.txt); do ssh -i key.pem ubuntu@$ip "sudo apt update && sudo apt -y upgrade"; done。备份日志到本地:rsync -avz -e "ssh -i key.pem" ubuntu@ip:/var/log/ ./logs/ip/。
16. 问:如果提示“Permission denied (publickey)”,我该怎么定位与修复?
答:先检查私钥权限:chmod 400 key.pem;确认连接用户名(ubuntu/ec2-user/root等)正确;确认公钥已写入目标实例的~/.ssh/authorized_keys;在本地开启ssh调试:ssh -vvv -i key.pem user@ip,查看服务器返回的身份验证方法;若是云平台,检查控制台是否注入了正确公钥。
17. 问:实例无公网IP但需要临时进入,有哪些安全可行的方法?
答:使用跳板机(Bastion)或云厂商的Session Manager/Cloud Shell;也可将云环境配置VPN或使用端口转发(ssh -J);推荐使用Session Manager(AWS SSM)实现无公网端口且可审计的登录。
18. 问:登录后运维常用的前三个命令是什么,分别用于什么场景?
答:1) sudo systemctl status
— 检查服务运行状态与故障;2) journalctl -u -f — 实时跟踪服务日志定位错误;3) df -h && du -sh /var/log/* — 检查磁盘使用,快速定位磁盘满导致的故障。
来源:运维工程师视角 美国云服务器怎么进入 常用命令与登录技巧