菜鸟科技网

SSH操作命令有哪些常用技巧?

目录

  1. 基础连接

    SSH操作命令有哪些常用技巧?-图1
    (图片来源网络,侵删)
    • 基本语法
    • 指定端口
    • 指定用户名
    • 结合使用
  2. 安全密钥登录 (推荐)

    • 生成密钥对
    • 将公钥复制到远程服务器
    • 使用密钥登录
    • 配置 SSH 客户端
  3. 文件传输

    • scp - 安全复制
    • sftp - 安全文件传输协议
  4. 高级 SSH 使用技巧

    • 端口转发 (隧道)
      • 本地端口转发
      • 远程端口转发
      • 动态端口转发 (SOCKS 代理)
    • ssh-agent - 密钥代理
    • ~/.ssh/config 配置文件 (简化命令)
  5. 实用命令

    SSH操作命令有哪些常用技巧?-图2
    (图片来源网络,侵删)
    • 查看版本
    • 调试连接问题
    • 执行远程命令
  6. 安全建议


基础连接

基本语法

ssh [用户名]@[服务器IP或域名]

连接到 user@example.com

ssh user@example.com

首次连接时,系统会提示你确认服务器的指纹(这是为了防止中间人攻击),输入 yes 即可。

指定端口

SSH 服务运行在非标准的 22 端口,使用 -p 选项。

ssh -p 2222 user@example.com

指定用户名

如果用户名与本地用户名不同,必须指定。

ssh admin@192.168.1.100

结合使用

将选项和用户名、地址组合在一起。

ssh -p 2222 admin@192.168.1.100

安全密钥登录 (推荐)

使用密钥对比密码更安全,也更方便。

生成密钥对

在本地机器上执行,如果已有密钥,可以跳过此步。

# 使用 Ed25519 算法(推荐,现代且高效)
ssh-keygen -t ed25519
# 或者使用传统的 RSA 算法
# ssh-keygen -t rsa -b 4096

命令会提示你保存密钥的位置(默认 ~/.ssh/id_ed25519)和设置密码(可选,但更安全)。

将公钥复制到远程服务器

使用 ssh-copy-id 命令可以轻松完成。

ssh-copy-id -p 2222 user@example.com

此命令会将你 ~/.ssh/id_*.pub 文件中的公钥内容追加到远程服务器 ~/.ssh/authorized_keys 文件的末尾。

使用密钥登录

配置完成后,再次登录就不需要输入密码了。

ssh user@example.com

如果生成密钥时设置了密码,系统会要求你输入密钥的密码。


文件传输

scp - 安全复制

scp 的语法和 cp 类似,但需要在源或目标地址前加上 [user@]host:

从本地复制到远程

# 复制单个文件
scp local_file.txt user@example.com:/remote/path/
# 复制整个目录
scp -r /local/directory user@example.com:/remote/path/
# 指定端口
scp -P 2222 local_file.txt user@example.com:/remote/path/

注意: -P (大写) 用于 scp 指定端口,而 -p (小写) 用于保留文件的时间戳等属性。

从远程复制到本地

# 复制单个文件
scp user@example.com:/remote/path/remote_file.txt ./local_directory/
# 复制整个目录
scp -r user@example.com:/remote/path/ ./local_directory/

sftp - 安全文件传输协议

sftp 提供了一个交互式的 shell,类似 ftp,但连接是加密的。

sftp user@example.com

连接后,你会进入一个 sftp> 提示符,可以使用以下命令:

命令 描述 示例
ls 列出远程目录内容 ls -l
cd 切换远程目录 cd /var/log
get 下载文件到本地 get remote_file.txt
put 上传本地文件到远程 put local_file.txt
mkdir 在远程创建目录 mkdir new_dir
rm 删除远程文件 rm old_file.txt
rmdir 删除远程空目录 rmdir empty_dir
exit 退出 sftp 会话 exitbye

高级 SSH 使用技巧

端口转发 (隧道)

通过 SSH 隧道,可以安全地访问被防火墙阻挡的服务。

本地端口转发

将本地机器的一个端口流量转发到远程服务器的一个端口。 场景: 你想从家里访问公司内网的数据库服务(db_server:3306),但公司只允许通过堡垒机(bastion_host)访问。

# 将本地 3307 端口的流量,通过 bastion_host 转发到 db_server 的 3306 端口
ssh -L 3307:db_server:3306 user@bastion_host

在你的本地机器上,连接 localhost:3307 就等同于连接公司内网的 db_server:3306

远程端口转发

将远程服务器的一个端口流量转发到本地机器的一个端口。 场景: 你在办公室,想让家里的电脑能访问你办公室电脑上的一个 Web 服务(localhost:8080)。

# 在办公室电脑上执行,将远程服务器 (home_server) 的 8080 端口流量转发到本地 8080 端口
ssh -R 8080:localhost:8080 user@home_server

在你的 home_server 上,访问 localhost:8080 就等同于访问你办公室电脑的 localhost:8080

动态端口转发 (SOCKS 代理)

创建一个 SOCKS5 代理,可以代理所有通过指定端口的 TCP 流量。 场景: 你想通过一个远程服务器安全地浏览互联网,访问所有网站都通过该服务器中转。

# 在本地机器上执行,创建一个监听本地 1080 端口的 SOCKS 代理
ssh -D 1080 user@example.com

配置你的浏览器(如 Firefox、Chrome)使用 localhost:1080 作为 SOCKS 代理,所有网络流量都会加密并通过 example.com 跳转。

ssh-agent - 密钥代理

ssh-agent 是一个后台程序,用于持有你的私钥,一旦你将密钥添加到 ssh-agent,在当前会话中,所有 SSH 连接都可以使用该密钥而无需重复输入密码。

# 启动 ssh-agent (通常在 shell 启动脚本中配置)
eval "$(ssh-agent -s)"
# 将私钥添加到 agent
ssh-add ~/.ssh/id_ed25519
# 如果设置了密码,此时需要输入一次

添加后,你打开新的终端窗口,ssh 命令将自动使用 agent 中的密钥。

~/.ssh/config 配置文件

这个文件可以让你为不同的主机创建别名,简化命令。

编辑 ~/.ssh/config 文件:

# ~/.ssh/config
# 公司服务器配置
Host company-bastion
    HostName 192.168.1.100
    User admin
    Port 2222
    IdentityFile ~/.ssh/company_key
# GitHub 配置 (使用密钥)
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github
# 个人服务器配置
Host personal-server
    HostName example.com
    User myuser
    ForwardX11 yes # 启用 X11 转发

配置后,连接变得非常简单:

ssh company-bastion
ssh personal-server

实用命令

查看版本

ssh -V

调试连接问题

使用 -v (verbose) 选项可以查看详细的连接过程,对排查问题非常有用。

ssh -v user@example.com

使用 -vv-vvv 可以获得更详细的信息。

执行远程命令

无需登录到远程 shell,直接在远程执行命令并返回结果。

# 获取远程服务器的磁盘使用情况
ssh user@example.com 'df -h'
# 在远程服务器上创建一个目录
ssh user@example.com 'mkdir -p /tmp/my_project'
# 结合管道,将本地文件内容通过 SSH 写入远程文件
cat local_file.txt | ssh user@example.com 'cat > /remote/path/remote_file.txt'

安全建议

  1. 优先使用密钥登录:禁用密码登录,只允许密钥登录。
  2. 使用强密码:如果必须使用密码,请确保密码足够复杂。
  3. 更改默认端口:将 SSH 服务的端口从 22 改为一个非标准的、高数字的端口。
  4. 禁用 root 登录:在服务器配置中,禁止 root 用户直接通过 SSH 登录。
  5. 使用 Fail2ban:部署 Fail2ban 工具,自动封禁多次登录失败的 IP 地址。
  6. 定期更新 OpenSSH:保持你的 OpenSSH 软件是最新版本,以获得最新的安全补丁。
  7. 使用 AllowUsersAllowGroups:在 SSH 服务器配置文件 (sshd_config) 中,只允许特定的用户或用户组通过 SSH 登录。

希望这份指南对你有帮助!SSH 是一个非常强大的工具,熟练掌握它能极大地提升你的工作效率。

分享:
扫描分享到社交APP
上一篇
下一篇