ssh命令详解:如何远程登录到服务器。vi命令详解:如何在服务器上使用vi编辑器。ssh+vi的组合使用:将两者结合起来,高效地远程编辑文件。
Part 1: ssh 命令详解
ssh (Secure Shell) 是一个用于安全远程登录和管理网络设备的协议和程序,它通过加密所有传输的数据,确保了通信的安全性,是替代不安全的 telnet 和 rlogin 的标准工具。

基本语法
ssh [用户名@]主机名 [命令]
[用户名@]: 可选,指定要登录的远程服务器的用户名,如果省略,则默认使用当前本地系统的用户名。主机名: 必需,可以是服务器的 IP 地址或域名。[命令]: 可选,在登录后直接执行这个命令,然后退出,如果不提供,则会打开一个交互式 shell。
常用示例
-
最基本用法:远程登录 假设你的服务器 IP 是
168.1.100,你想以用户admin的身份登录。ssh admin@192.168.1.100
第一次连接时,SSH 会提示你服务器的公钥指纹,你输入
yes确认后,该主机的信息会被保存在~/.ssh/known_hosts文件中,以后连接就不会再提示了,之后,系统会提示你输入admin用户的密码。 -
使用指定端口 SSH 服务运行在非标准的 22 端口(2222),使用
-p选项。ssh -p 2222 admin@192.168.1.100
-
直接在远程服务器上执行命令 你不需要登录进去再操作,可以直接在本地命令行中指定要执行的远程命令,SSH 会执行完命令后立即返回。
(图片来源网络,侵删)# 获取远程服务器的磁盘使用情况 ssh admin@192.168.1.100 "df -h" # 在远程服务器上创建一个目录 ssh admin@192.168.1.100 "mkdir -p ~/new_project"
-
通过 SSH 复制文件 (
scp)scp(Secure Copy) 是基于 SSH 的文件复制工具,用法类似cp。# 将本地文件复制到远程服务器 scp local_file.txt admin@192.168.1.100:/home/admin/ # 将远程服务器文件复制到本地 scp admin@192.168.1.100:/home/admin/remote_file.txt ./ # 复制整个目录 scp -r local_dir/ admin@192.168.1.100:/home/admin/
Part 2: vi 命令详解
vi (Visual Editor) 是一个功能强大但学习曲线陡峭的文本编辑器,几乎在所有的 Linux/Unix 系统上默认安装,它有两种主要模式:
- 普通模式:默认模式,用于导航、复制、粘贴、删除等操作,你不能直接输入文本。
- 插入模式:用于输入和编辑文本。
vi 的基本工作流程
- 打开文件:
vi filename - 进入插入模式:按
i(在光标前插入),a(在光标后追加),o(在下一行新建) 等。 - 编辑文本:像在记事本一样输入文字。
- 返回普通模式:按
Esc键,这是最关键的一步,必须先回到普通模式才能进行其他操作。 - 保存并退出:在普通模式下,输入
wq然后按回车。
常用 vi 命令
| 命令 | 作用 | 备注 |
|---|---|---|
| 启动和退出 | ||
vi filename |
打开或创建文件 | |
q |
退出(如果没有修改) | |
q! |
强制退出(不保存修改) | |
w |
保存文件 | |
wq 或 x |
保存并退出 | 最常用 |
| 模式切换 | ||
i |
在光标前进入插入模式 | |
a |
在光标后进入插入模式 | |
o |
在当前行下方新建一行并进入插入模式 | |
O |
在当前行上方新建一行并进入插入模式 | |
Esc |
从任何模式返回普通模式 | 必记 |
| 光标移动 (普通模式) | ||
h, j, k, l |
左,下,上,右 | 核心指法 |
gg |
跳转到文件第一行 | |
G |
跳转到文件最后一行 | |
数字 + G |
跳转到指定行 (10G 跳转到第10行) |
|
| 文本操作 (普通模式) | ||
dd |
删除(剪切)当前行 | |
数字 + dd |
删除(剪切)指定行数 (5dd 删除5行) |
|
yy |
复制(yank)当前行 | |
数字 + yy |
复制指定行数 (3yy 复制3行) |
|
p |
在光标后粘贴 | |
P |
在光标前粘贴 | |
u |
撤销上一步操作 | |
Ctrl + r |
重做(取消撤销) | |
| 搜索和替换 | ||
/keyword |
从光标处向下搜索 keyword |
按 n 查找下一个,N 查找上一个 |
?keyword |
从光标处向上搜索 keyword |
|
%s/old/new/g |
全局替换 old 为 new |
Part 3: ssh + vi 的组合使用
这是最核心的场景:你需要在本地通过 SSH 连接到远程服务器,并使用 vi 编辑一个远程文件。
标准流程
-
通过
ssh登录到远程服务器 在你的终端(如 macOS 的 Terminal 或 Windows 的 WSL/PuTTY)中输入:
(图片来源网络,侵删)ssh user@your-server.com
输入密码后,你就进入了远程服务器的命令行环境。
-
使用
vi打开并编辑文件 你已经在远程服务器的 shell 中了,直接使用vi命令打开你想要编辑的文件。# 假设你要编辑一个位于 /home/user/config.conf 的文件 vi /home/user/config.conf
vi界面会出现在你的本地终端窗口中,但所有操作都发生在远程服务器上。 -
编辑文件 按照
vi的操作方法进行编辑(按i进入插入模式,修改内容,按Esc返回普通模式)。 -
保存并退出 在普通模式下,输入
wq并按回车。:wq
编辑器会关闭,你将返回到远程服务器的 shell 提示符,你可以输入
exit或按Ctrl+D退出 SSH 会话,回到你的本地终端。
高级技巧与最佳实践
使用 SSH 密钥对进行无密码登录
每次都输密码很麻烦,强烈建议使用 SSH 密钥对来免除密码输入。
-
在本地生成密钥对(如果还没有的话):
ssh-keygen -t rsa -b 4096
一路回车即可,会在
~/.ssh/目录下生成id_rsa(私钥) 和id_rsa.pub(公钥)。 -
将公钥复制到远程服务器:
# 方法一:使用 ssh-copy-id(最简单) ssh-copy-id user@your-server.com # 方法二:手动复制 # 1. 在本地查看公钥内容 cat ~/.ssh/id_rsa.pub # 2. 复制输出的全部内容 # 3. 登录到远程服务器 ssh user@your-server.com # 4. 在远程服务器上,将公钥内容追加到 authorized_keys 文件 mkdir -p ~/.ssh echo "粘贴刚才复制的公钥内容到这里" >> ~/.ssh/authorized_keys # 5. 设置正确的权限(非常重要!) chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
完成后,
ssh user@your-server.com就可以直接登录了。
使用配置文件简化连接
如果你经常连接多个服务器,可以在 ~/.ssh/config 文件中为每个服务器设置一个别名。
编辑 ~/.ssh/config 文件(可以用 vi ~/.ssh/config):
# 为我的开发服务器设置一个别名
Host dev-server
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_dev
# 为我的生产服务器设置一个别名
Host prod-server
HostName server.example.com
User deploy
IdentityFile ~/.ssh/id_rsa_prod
设置好后,你就可以用非常简单的命令连接了:
ssh dev-server ssh prod-server
使用更现代的编辑器(可选)
vi 很强大,但如果你觉得它太难用,很多系统也预装了 nano,它更简单直观。
# 在远程服务器上安装 nano (如果需要) sudo apt-get install nano # Debian/Ubuntu sudo yum install nano # CentOS/RHEL # 使用 nano 编辑远程文件 ssh user@your-server.com "nano /path/to/file.txt"
或者,在登录后使用:
ssh user@your-server.com nano /path/to/file.txt
nano 的快捷键显示在屏幕底部,Ctrl+O 保存,Ctrl+X 退出。
ssh是你进入远程服务器的钥匙。vi是你在服务器上编辑文本的工具。ssh user@servervi file是最经典的组合,是每个系统管理员和开发者的必备技能。- 学习使用 SSH 密钥和配置文件 可以极大地提高你的工作效率。
希望这个详细的指南对你有帮助!
