背景介绍
SSH相关:Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。
目前使用到的情形有:
- git上通过SSH进行项目的拉取与上传
- 远程访问服务器
如何设置本地电脑为服务器
通过ifconfig可以访问当前ip,下载对应的服务器协议进行安装。SSH分为客户端openssh-client和服务器 openssh-server,其中被访问的一端为openssh-server。
首先,确保SSH服务在本机上运行,使用以下命令查看 SSH 服务状态:
1
sudo systemctl status ssh
如果服务未启动,可以通过以下命令启动它:
1
sudo systemctl start ssh
之后还应该检查防火墙的设置,检查防火墙状态(UFW 或 FirewallD) 如果你使用的是 UFW(Ubuntu 防火墙工具):
1
sudo ufw status
输出可能会显示防火墙规则。如果 OpenSSH 或端口 22 未列出为 “Allow”,你可以通过以下命令允许 SSH:
1
sudo ufw allow ssh
或者允许特定的端口(例如 22):
1
sudo ufw allow 22
常见的结果为,其80端口被监听/允许访问,而ssh的默认端口22并没有被允许,因此导致了访问请求失败
如何连接远程服务器
SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号
- ssh -l username ip/server_name
- ssh username@ip_address # 口令登录
- ssh -X username@ip_address # 调用图形界面
- ssh ip_addres # 如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名
SSH的免密登录
SSH的使用条件为,服务器拥有本地公钥值,而本地拥有公钥及私钥可以对访问进行验证。免密登录的步骤有:
- 在本地终端生成密钥对,可以指定加密方式等,例如
ssh-keygen。此时会在本地的”~/.ssh”目录下生成名为id_rsa和id_rsa.pub的私钥文件和公钥文件。 - 将公钥字段复制到远程服务器,例如git的
Add SSH中以及远程服务器的”~/.ssh/authorized_keys”文件内。可以通过手动赋值或者通过ssh-copy-id user@host的形式(linux命令),windows尚未找到,仍需手动添加
注意事项
- SSH 服务对
~/.ssh目录和authorized_keys文件的权限要求比较严格,确保权限设置正确(确保没有过多权限,尤其是不能有“写”权限给组和其他用户。)。同时,检查用户主目录(~)权限,确保其没有过多权限(比如 755)1 2
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- 如果系统开启了 SELinux,可能会阻止 SSH 服务访问 ~/.ssh 目录。可以临时关闭 SELinux 进行测试:
1
sudo setenforce 0
- sshd 配置文件:检查
/etc/ssh/sshd_config配置文件,确保以下参数没有注释掉,并且设置正确:1 2 3 4
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # 修改配置文件后,需要重启 SSH 服务: sudo systemctl restart sshd
SSH的免ip登录以及为当前用户配置不同的公钥(也可参考Git SSH配置文章)
直接通过ssh host_nickname即可实现登录
配置关键文件~/.ssh/config,添加以下内容:
1
2
3
4
5
6
Host server-alias # server-alias为SSH链接的服务器别名
HostName server-ip # 服务器地址
Port 22
User username # 服务器端用户名
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa # 私钥地址,默认为 ~/.ssh/id_rsa
最基础版本的设置如下,即可实现免ip和用户名登陆
1
2
3
Host Desktop
HostName __your_ip__
User __your_ip_username__
文件传输
经过上述配置,有效的简化了登录操作,会为我们节省不少时间。更重要的是,所有底层使用SSH的程序,都因此而简化了操作步骤。比如:
用于传输文件的scp和rsync命令。scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 命令格式为:
1
2
3
4
# 递归传输文件
scp -r local_file remote_username@remote_ip:remote_folder
# 远程服务器文件传输到本地
scp -r remote_username@remote_ip:remote_folder local_file
如果服务器端上配置了git远程仓库,只需输入:
1
git clone server-alias:/git-repo