name: ssh description: 建立和管理到远程机器的SSH连接,包括密钥生成、配置和文件传输。当连接到远程服务器、执行远程命令或通过SCP传输文件时使用。 triggers:
- ssh
- 远程服务器
- 远程机器
- 远程主机
- 远程连接
- 安全shell
- ssh密钥
SSH技能
此技能提供建立和管理到远程机器的SSH连接的能力。
能力
- 使用密码或密钥认证建立SSH连接
- 生成和管理SSH密钥对
- 配置SSH以便于连接
- 在远程机器上执行命令
- 在本地和远程机器之间传输文件
- 管理SSH配置和已知主机
认证方法
密码认证
ssh username@hostname
提示时,您应该向用户询问密码或私钥。
基于密钥的认证
生成新的SSH密钥对:
ssh-keygen -t ed25519 -f ~/.ssh/key_name -C "comment" -N ""
将公钥复制到远程服务器:
ssh-copy-id -i ~/.ssh/key_name.pub username@hostname
使用私钥连接:
ssh -i ~/.ssh/key_name username@hostname
SSH配置
为更轻松的连接创建或编辑SSH配置文件:
mkdir -p ~/.ssh
cat > ~/.ssh/config << 'EOF'
Host alias
HostName hostname_or_ip
User username
IdentityFile ~/.ssh/key_name
Port 22
ServerAliveInterval 60
EOF
chmod 600 ~/.ssh/config
然后使用别名连接:
ssh alias
常见SSH选项
-p PORT: 连接到特定端口-X: 启用X11转发-L local_port:remote_host:remote_port: 设置本地端口转发-R remote_port:local_host:local_port: 设置远程端口转发-N: 不执行远程命令(对端口转发有用)-f: 在后台运行-v: 详细模式(增加v以获得更详细的输出)
使用SCP传输文件
将文件复制到远程服务器:
scp /path/to/local/file username@hostname:/path/to/remote/directory/
从远程服务器复制文件:
scp username@hostname:/path/to/remote/file /path/to/local/directory/
递归复制目录:
scp -r /path/to/local/directory username@hostname:/path/to/remote/directory/
SSH代理
启动SSH代理:
eval "$(ssh-agent -s)"
向代理添加密钥:
ssh-add ~/.ssh/key_name
故障排除
- 检查远程SSH服务状态:
systemctl status sshd - 验证SSH端口是否开放:
nc -zv hostname 22 - 调试连接问题:
ssh -vvv username@hostname - 检查权限:SSH私钥应具有600权限(
chmod 600 ~/.ssh/key_name) - 验证已知主机:如果主机密钥更改,使用
ssh-keygen -R hostname移除旧条目
安全的SSH密钥管理
具有适当权限的本地存储
最基本的方法是确保适当的文件权限:
# 为私钥设置正确的权限
chmod 600 ~/.ssh/id_ed25519
# 为公钥设置正确的权限
chmod 644 ~/.ssh/id_ed25519.pub
# 为SSH目录设置正确的权限
chmod 700 ~/.ssh