远程登录命令

使用 ssh 命令可以安全地远程登录到另一台 Linux/Unix 服务器。基本格式如下:

1
ssh [用户名@]主机地址 [-p 端口号]

常用示例

  • 使用默认端口(22)登录
    ssh root@192.168.1.100
  • 指定其他端口
    ssh admin@example.com -p 2222
  • 仅执行一条命令后退出
    ssh user@host 'ls -l'

常见选项

选项 说明
-p <port> 指定远程服务器的端口(默认22)
-i <keyfile> 使用指定的私钥文件进行身份验证
-l <username> 指定登录用户名(等价于 user@ 语法)
-v 显示详细调试信息(可加多个 v 增加详细度)
-C 压缩传输数据
-X 启用 X11 图形界面转发
-N 不执行远程命令(常用于端口转发)

首次登录提示

第一次连接到某台主机时,ssh 会提示您确认远程主机的指纹:

1
2
The authenticity of host '...' can't be established.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入 yes 并回车,该主机的指纹会被保存到 ~/.ssh/known_hosts,后续登录不再提示

免密登录设置

SSH 密钥设置流程

  1. 创建密钥时自定义文件名
  2. 上传公钥到远程服务器
  3. 修改本地 config 文件
  4. 验证登录

创建密钥

可同时修改密钥文件名

可以在生成密钥时直接指定文件名,比如把默认的 id_ed25519 改成想要的名字:

1
ssh-keygen -t ed25519 -f ~/.ssh/my_server_key -C "your_email@example.com"

参数说明

  • -t ed25519:生成 ed25519 密钥,推荐使用
  • -f ~/.ssh/my_server_key:指定密钥文件名
  • -C "your_email@example.com":备注信息,可写邮箱或说明

生成后会得到:

  • 私钥:~/.ssh/my_server_key
  • 公钥:~/.ssh/my_server_key.pub

如果你想要 RSA,也可以:

1
ssh-keygen -t rsa -b 4096 -f ~/.ssh/my_server_key -C "your_email@example.com"

把公钥上传到远程服务器

方法 A:使用 ssh-copy-id(最方便)

1
ssh-copy-id -i ~/.ssh/my_server_key.pub user@server_ip

例如:

1
ssh-copy-id -i ~/.ssh/my_server_key.pub root@192.168.1.100

它会把公钥自动追加到远程服务器的:

1
~/.ssh/authorized_keys

方法 B:手动上传

如果没有 ssh-copy-id,可以手动执行:

先查看公钥内容:

1
cat ~/.ssh/my_server_key.pub

复制输出内容,然后登录服务器,在服务器上执行:

1
2
3
4
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "复制的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

修改本地 SSH config 文件

如果你密钥文件名不是默认的 id_rsa / id_ed25519,建议在本地 ~/.ssh/config 中配置,免得每次都手动指定密钥。

编辑本地 config:

1
vim ~/.ssh/config

添加类似内容:

1
2
3
4
5
Host myserver
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/my_server_key
Port 22

说明

  • Host myserver:你给这个服务器起的别名
  • HostName:远程服务器 IP 或域名
  • User:登录用户名
  • IdentityFile:指定刚创建的私钥文件
  • Port:SSH 端口,默认 22

设置 config 和私钥权限

SSH 对权限比较严格,建议执行:

1
2
3
4
chmod 600 ~/.ssh/my_server_key
chmod 644 ~/.ssh/my_server_key.pub
chmod 600 ~/.ssh/config
chmod 700 ~/.ssh

使用配置好的别名连接服务器

之后可以直接:

1
ssh myserver

不需要再写完整 IP 和密钥路径了。


验证是否成功

如果配置成功,应该能直接登录服务器。

也可以用调试模式查看详细信息:

1
ssh -v myserver

如果你想重新生成一个“可改名”的密钥文件

也可以先删除旧密钥,再重新生成:

1
2
rm -f ~/.ssh/my_server_key ~/.ssh/my_server_key.pub
ssh-keygen -t ed25519 -f ~/.ssh/my_server_key -C "your_email@example.com"

一个完整示例

假设你要连接服务器:

  • 服务器 IP:203.0.113.10
  • 用户名:ubuntu
  • 密钥名:prod_key

生成密钥

1
ssh-keygen -t ed25519 -f ~/.ssh/prod_key -C "prod"

上传公钥

1
ssh-copy-id -i ~/.ssh/prod_key.pub ubuntu@203.0.113.10

配置本地 ~/.ssh/config

1
2
3
4
5
Host prod
HostName 203.0.113.10
User ubuntu
IdentityFile ~/.ssh/prod_key
Port 22

连接

1
ssh prod