Table of Contents

SSH的使用


在服务器上安装SSH并配置

sudo apt-get install ssh
sudo apt-get install openssh-server
sudo service ssh start
sudo service ssh suatus
# 配置文件里可以开启:允许密码登录、允许root登录、端口等
sudo vim /etc/ssh/sshd_config
sudo service ssh restart

使用SSH生成密钥

# 在Windows上:
ssh-keygen -t rsa -f C:\Users\WINDOWS_USER\.ssh\KEY_FILENAME -C USERNAME -b 2048
# 在Mac上:
ssh-keygen -t rsa -f ./key-ubuntu-oracle-git -C zhonghui -b 2048
# USERNAME应该是可以随便写的
 
-t 指定密钥类型为 RSA(目前仍广泛使用的一种加密算法)
-f 指定密钥文件的保存路径和文件名(不带扩展名,生成后会有两个文件 公钥和私钥)
-C 为密钥添加注释(Comment),通常用于标识这个密钥是谁用的。这个注释会存储在公钥文件中
-b 指定密钥长度。数值越大,安全性越高(但生成和使用会稍慢)。2048 是常用的平衡选择
 
# 会生成两个文件,一个公钥,一个私钥
# 生成之后把公钥添加到服务器上(相当于把锁装上),比如GitLab或者GCP都提供添加SSH公钥的选项
# Linux服务器上如何导入公钥?把公钥内容放在这个文件里:~/.ssh/authorized_keys
 
# 服务器上
# .ssh/ 的权限应该是 700
# authorized_keys 的权限应该是 600

在服务器上安装(多个)公钥

# 公钥安装在这里:
/home/user_name/.ssh/authorized_keys

# 每行一个公钥,不要换行,后面可以附加一些注释(例如邮箱或用户名)
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArX... user1@example.com
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBX... user2@example.com

# 确保权限和归属正确
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chown -R user_name:user_name ~/.ssh

使用私钥登录SSH

ssh user@host -i key_file

默认私钥

# SSH有一些默认的私钥,没有指定-i的时候,它们会被默认用于尝试登录
# 它们的路径和命名是固定的,不能改变
# 每一个文件都是一个私钥(不是多个)
~/.ssh/id_ed25519
~/.ssh/id_rsa
~/.ssh/id_ecdsa
~/.ssh/id_dsa

# 不方便管理多个私钥
# 感觉不太安全
# 结论:不推荐使用

为Github配置SSH

使用SSH协议克隆Github仓库

配置别名

# 配置文件:~/.ssh/config(没有就touch)
# 配置方式:
Host server_name
    HostName yourserver.com
    User user_name
    IdentityFile ~/.ssh/your_private_key

# 然后就可以这样登录了
ssh server_name

# Mac测试成功

SSH Agent

好像可以用于管理多个私钥,还没有具体了解过

使用SCP传输文件

scp -i key_file source_path/xxx.zip user@host:/home/target_path
scp -i key_file user@host:/home/xxx.zip ./target_path
 
# 可以上传也可以下载,交换一下Source和Target的顺序就可以了
# 要上传到Linux服务器的压缩包记得使用utf-8编码压缩
 
# 是可以传输文件夹的(使用-r参数)
# 注意一下,路径后面有没有/可能有影响
scp -r lab:/home/hawk/zh-ge/download ./Downloads/lab/

安全错误

在某些情况下,比如域名绑定的IP变了,就连不上去了,会有安全警告,这时候把known_hosts(一个文件)清空就行了,相当于清空连接历史。known_hosts一般在~或者我的文档

密钥的文件权限

在MacOS上,如果密钥的权限设置不正确,可能是无法使用的,比如会看到类似下面的错误

ssh xxx@xxx -i xxx
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'xxx' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "xxx": bad permissions
xxx@xxx: Permission denied (publickey).

这时需要修改一下密钥文件的权限

chmod 600 key_file

然后就可以正常登录了,原理就是把其他用户对密钥文件的权限去掉就可以了(chmod go-x)

登录时的程序参数

# 指定SSH服务器的端口
ssh -p 2222 user@host

# 使用「-o」指定通用配置项目,比如这里可以使用Port指定端口
# SSH 的通用配置选项(-o,Option),可以用它设置几乎所有 ssh_config 文件中的参数
ssh -o Port=2222 user@host

调试错误

# 使用 -vvv 参数,可以输出详细信息,用于调试登录过程中的错误
ssh -vvv ...

限制IP

如果登录的时候,出现了以下的错误,那么说明自己的IP在黑名单里,或者没有在白名单里。
基本上除了换网络、联系管理员之外,是没有其他解决方式的。

kex_exchange_identification: banner line 0: You are not welcome to use sshd from xxx.