SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络中安全地传输数据。它通常用于远程管理和远程访问计算机系统。
关键特点和用途:
- 加密通信:使用加密算法对数据进行加密,使得黑客难以窃取敏感信息
- 远程登录:允许用户从远程位置登录到目标计算机系统,可以通过命令行界面或图形界面进行操作
- 远程文件传输:用户可以安全地传输文件和目录,常用的工具有 SCP(Secure Copy)和 SFTP(SSH File Transfer Protocol)
- 端口转发:可以设置端口转发,用于在安全的通道中传输其他网络服务,如数据库连接或 Web 浏览器访问
- 隧道技术:SSH 可以创建加密隧道,安全地传输其他协议的流量,如 VPN
使用SSH的步骤
安装SSH
1.安装OpenSSH服务器
sudo apt update sudo apt install openssh-server
2.启动和启用SSH 服务
sudo systemctl start ssh sudo systemctl enable ssh
3.检查 SSH 服务状态
sudo systemctl status ssh
使用SSH客户端连接远程服务器
1.安装 SSH 客户端
sudo apt install openssh-client
2.连接到远程服务器
ssh 用户名@ip地址
3.指定端口 如果远程服务器的 SSH 服务运行在非默认端口(默认端口是 22),可以使用 -p 参数指定端口。
ssh -p 2222 用户名@ip地址
常用的SSH命令
1.复制文件到远程服务器
scp /home/user/file.txt 用户名@ip地址:/home/user/
2.从远程服务器复制文件
scp 用户名@ip地址:/home/user/file.txt /home/localuser/
3.进行文件同步,比如将本地目录同步到远程主机目录
rsync -avz /path/to/local/directory 用户名@ip地址:/path/to/remote/directory
4.使用 nohup 命令在后台运行命令,即使断开 SSH 连接也不会中断:
nohup command &
5.远程执行命令
ssh 用户名@ip地址 'command' #使用 ssh 命令远程执行命令,并获取返回结果
ssh 用户名@ip地址 'sudo command' #使用 sudo在远程主机以管理员权限执行命令
6.使用 vim 或 nano 等文本编辑器远程编辑文件
ssh 用户名@ip地址 'vim /path/to/remote/file'
7.使用 SSH 进行端口转发,可以将本地端口转发到远程主机的指定端口
ssh -L 本地端口:远程ip:远程端口 用户名@ip地址
端口转发的应用场景:
- 访问远程数据库
如果远程数据库服务器不允许直接从你的本地网络访问,但允许从中间的 SSH 服务器访问,你可以使用端口转发将本地数据库客户端连接到远程数据库。
ssh -L 5432:database.example.com:5432 user@ssh.example.com
- 安全浏览内网网页
有时候需要访问只在远程内网可见的网页服务,可以使用端口转发来实现。
ssh -L 8080:intranet.example.com:80 user@ssh.example.com
这样,可以在本地通过 http://localhost:8080 访问远程内网网站 http://intranet.example.com。
- 远程调试
开发和调试应用程序时,可以将本地调试端口转发到远程服务器上。例如,你的应用程序在远程服务器上运行,你可以将本地调试端口转发到远程应用程序的调试端口:
ssh -L 5005:localhost:5005 user@remote.example.com
这样,你可以在本地通过 localhost:5005 连接远程应用程序的调试器
- 绕过防火墙和网络限制
如果你在受限制的网络环境中,而你需要访问外部的服务,可以通过中间的 SSH 服务器进行端口转发。
ssh -L 8888:target.example.com:80 user@bastion.example.com
这样,你可以在本地通过 localhost:8888 访问外部的 target.example.com:80 服务。
- 安全传输数据
通过 SSH 进行端口转发,所有的数据传输都是加密的,确保了数据的安全性。
8.使用 SFTP 进行文件传输
sftp 用户名@ip地址
连接后可以使用类似于 FTP 的命令,如 get、put、ls 等。
9.可以使用 SSH 密钥对进行认证 使用 ssh-keygen 生成密钥对 避免每次输入密码
ssh-keygen # 生成 SSH 密钥对
ssh-copy-id username@remote_host # 将公钥复制到远程主机上