Ubuntu系统默认安装了OpenSSH客户端(openssh-client),无需额外安装即可连接远程服务器。若需在本地Ubuntu上搭建SSH服务器(供其他设备连接),需安装openssh-server:
sudo apt update
sudo apt install openssh-server # 安装SSH服务器
sudo systemctl start ssh # 启动SSH服务
sudo systemctl enable ssh # 设置开机自启
通过sudo systemctl status ssh可查看服务运行状态(显示active (running)表示正常)。
使用ssh命令连接远程服务器,基本语法为:
ssh username@hostname_or_ip_address
username:远程服务器上的用户名(如root、ubuntu);hostname_or_ip_address:远程服务器的IP地址或域名(如192.168.1.100、example.com)。yes确认),随后要求输入远程用户的密码。为避免每次连接都输入密码,可使用SSH密钥对认证:
ssh-keygen,按提示选择密钥保存路径(默认~/.ssh/id_rsa)和设置密码(可选):ssh-keygen -t rsa -b 4096 # 生成RSA密钥对(4096位强度)
ssh-copy-id命令将公钥(~/.ssh/id_rsa.pub)自动复制到远程服务器的~/.ssh/authorized_keys文件中:ssh-copy-id username@hostname_or_ip_address
此后,连接时无需输入密码(仅需输入本地私钥的密码,若设置了的话)。
SSH默认使用22端口,若远程服务器修改了SSH端口(如2222),需通过-p参数指定:
ssh -p 2222 username@hostname_or_ip_address
无需登录远程服务器即可在本地执行远程命令,语法为:
ssh username@hostname_or_ip_address 'command'
示例:查看远程服务器的磁盘使用情况:
ssh user@192.168.1.100 'df -h'
在SSH会话中,输入exit或按Ctrl+D即可断开连接。
编辑本地~/.ssh/config文件(若不存在则创建),可为常用服务器配置别名、端口、密钥等参数,减少重复输入:
nano ~/.ssh/config
添加以下内容(以myserver为例):
Host myserver
HostName 192.168.1.100 # 远程服务器IP或域名
User ubuntu # 远程服务器用户名
Port 2222 # SSH端口(默认22可省略)
IdentityFile ~/.ssh/id_rsa # 私钥文件路径
保存后,直接通过别名连接:
ssh myserver
SSH隧道可实现本地端口与远程端口映射,常用于安全访问远程服务:
8080)的请求转发到远程服务器的80端口(如访问远程Web服务):ssh -L 8080:localhost:80 username@hostname_or_ip_address
此时,本地浏览器访问http://localhost:8080即等同于访问远程服务器的http://localhost:80。8080)的请求转发到本地的80端口(如将远程服务器暴露给外部访问):ssh -R 8080:localhost:80 username@hostname_or_ip_address
ssh -D 1080 username@hostname_or_ip_address
配置浏览器或系统代理为SOCKS5,地址localhost,端口1080即可。用于本地与远程服务器之间的文件复制:
scp /path/to/local/file username@hostname_or_ip_address:/path/to/remote/destination
scp username@hostname_or_ip_address:/path/to/remote/file /path/to/local/destination
示例:将本地的document.txt复制到远程服务器的~/Documents目录:
scp document.txt user@192.168.1.100:~/Documents/
用于交互式文件传输(类似FTP,但更安全):
sftp username@hostname_or_ip_address
进入SFTP会话后,常用命令:
get remote_file local_file:下载远程文件到本地;put local_file remote_file:上传本地文件到远程;ls:查看远程目录内容;cd:切换远程目录;exit:退出SFTP会话。编辑远程服务器的/etc/ssh/sshd_config文件,修改Port参数(如改为2222):
sudo nano /etc/ssh/sshd_config
找到#Port 22,修改为Port 2222,保存后重启SSH服务:
sudo systemctl restart ssh
注意:修改端口后,连接时需通过-p参数指定新端口。
编辑/etc/ssh/sshd_config文件,找到PermitRootLogin参数,修改为no:
sudo nano /etc/ssh/sshd_config
将#PermitRootLogin prohibit-password改为PermitRootLogin no,保存后重启SSH服务。
使用ufw(Uncomplicated Firewall)限制仅特定IP地址可访问SSH端口(如22或2222):
sudo ufw allow from 192.168.1.100 to any port 22 # 仅允许192.168.1.100访问22端口
sudo ufw enable # 启用防火墙
通过journalctl命令查看SSH服务的实时日志(用于排查连接问题):
sudo tail -f /var/log/auth.log # Ubuntu系统日志路径
使用ss或netstat命令查看SSH服务是否在监听指定端口:
sudo ss -tulnp | grep sshd # 推荐(更简洁)
# 或
sudo netstat -tulnp | grep sshd
通过以上操作,可在Ubuntu系统中高效使用SSH进行远程连接、文件传输及服务器管理。