--- title: "22-ssh登入" created: 2025-11-25 tags: - 项目 aliases: - ssh登入 --- # ssh登入 ## 基本用法 远程登录服务器: ```bash ssh user@hostname ``` - user: 用户名 - hostname: IP地址或域名 第一次登录时会提示: ```text The authenticity of host '123.57.47.211 (123.57.47.211)' can't be established. ECDSA key fingerprint is SHA256:iy237yysfCe013/l+kpDGfEG9xxHxm0dnxnAbJTPpG8. Are you sure you want to continue connecting (yes/no/[fingerprint])? ``` 输入yes,然后回车即可。 这样会将该服务器的信息记录在`~/.ssh/known_hosts`文件中。 然后输入密码即可登录到远程服务器中。 默认登录端口号为22。 如果想登录某一特定端口: ```bash ssh user@hostname -p 22 ``` ## 配置文件 创建文件 `~/.ssh/config`。 然后在文件中输入: ```ssh-config Host myserver1 HostName IP地址或域名 User 用户名 Host myserver2 HostName IP地址或域名 User 用户名 ``` 之后再使用服务器时,可以直接使用别名myserver1、myserver2。 ## 密钥登录 创建密钥: ```bash ssh-keygen ``` 然后一直回车即可。 执行结束后,~/.ssh/目录下会多两个文件: - `id_rsa`:私钥 - `id_rsa.pub`:公钥 之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。 例如,想免密登录myserver服务器。则将公钥中的内容,复制到myserver中的`~/.ssh/authorized_keys`文件里即可。 也可以使用如下命令一键添加公钥: ```bash ssh-copy-id myserver ``` ## 执行命令 命令格式: ```bash ssh user@hostname command ``` 例如: ```bash ssh user@hostname ls -a ``` 或者 ```bash # 单引号中的$i可以求值 ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done' ``` 或者 ```bash # 双引号中的$i不可以求值 ssh myserver "for ((i = 0; i < 10; i ++ )) do echo $i; done" ``` ## win连阿里云 密钥对 用户目录下找到.ssh目录(everything找ssh也行) 创建文件config ![[image-4866ec3e.png]] ![[image-52044091.png]] 为config文件提供权限 ```dos icacls C:\Users\zv041\.ssh\config /inheritance:r icacls C:\Users\zv041\.ssh\config /grant zv041:F icacls C:\Users\zv041\.ssh\config /remove "UNKNOWN\\UNKNOWN" ``` - `/inheritance:r` 是移除继承的权限。 - `/grant zv041:F` 是授予你的账户 `zv041` 完全控制权限。 - `/remove "UNKNOWN\\UNKNOWN"` 是移除不需要的用户。 确保公钥在服务器上存在 ```bash cat ~/.ssh/authorized_keys ``` ![[image-adaf2691.png]] 将私钥文件放在.ssh目录下 ![[image-66bee734.png]] 设置私钥文件的权限 ```dos icacls C:\Users\zv041\.ssh\wei_01.pem /inheritance:r icacls C:\Users\zv041\.ssh\wei_01.pem /grant zv041:F ``` ![[image-574f005a.png]] 解释: `icacls C:\Users\zv041\.ssh\wei_01.pem /inheritance:r` - `icacls` 是一个 Windows 命令,用于显示或修改文件和文件夹的访问控制列表 (ACL)。 - `C:\Users\zv041\.ssh\wei_01.pem` 是目标文件的路径,这里指定的是你的 `.pem` 文件。 - `/inheritance:r` 用于移除文件的权限继承规则。 **作用**:此命令的作用是移除该文件的继承权限,即该 `.pem` 文件将不再从其上级目录继承任何权限。它确保该文件只根据直接分配给它的权限进行访问控制,而不会从父文件夹继承其他权限规则。这是为了增强 SSH 私钥的安全性,防止其他用户意外获得访问权限。 `icacls C:\Users\zv041\.ssh\wei_01.pem /grant zv041:F` - `/grant zv041:F` 用于授予指定用户或组的特定权限。 - `zv041` 是当前登录的用户(在你的系统中)。 - `:F` 表示“Full control”(完全控制)权限,意味着 `zv041` 用户对该文件有完全的访问权限,包括读取、写入、修改和删除该文件。 **作用**:此命令的作用是明确授予用户 `zv041` 对该 `.pem` 文件的完全控制权限,确保只有你自己可以访问和操作这个文件,进一步增强文件的安全性。 修改配置文件(config) ```ssh-config Host myserver HostName 8.130.142.189 User root IdentityFile C:/Users/zv041/.ssh/wei_01.pem ``` ![[image-575a7c11.png]] 再尝试使用 ssh myserver进行连接 连接成功 ![[image-ea482b6d.png]] 我的公钥 ```text ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCEaMEMqfu92PqoE+vayOvGiuydq/nMWtkOU77tshzzjyoc/zVatWgwkG6xzPqVczEevj5rel+VldkCAQsawvdCDNmcmhP4qKBWBeb/8AMGjgYQBuibCVx7EDu7QpV+4tKCG6373w009eS5vmph+914uqUcBxrMEjjMgKZqP7PcIA9nYwnViWxKaGbytzLyeKPMfpkJ9XqZQ/oVrD0B6vrp/CO/twaLNbJuwoDPnkiac1Dg4pHZX+CpdfRtv4BfnrM0+nUUmVPDVN4yPVezyFK1snSWYVId7bhc4RMI3T7IhkdkTH2dw3Eq7/rN8IlTq0tvmfNY9hFeB8PoS+YAfPTr skp-0jl1aa09m86u304iqchi ``` 之后换了服务器想用密钥对登入 只需要把该公钥传到该服务器中的`~/.ssh/authorized_keys`当中就行 --- **项目分区导航**:[[21-导入外部脚本|导入外部脚本]] ⬅️ | 22-ssh登入 | ➡️ [[23-scp传文件基本用法|scp传文件基本用法]]