SSH
ssh-keygen为ssh生成、管理和转换认证密钥,ssh-keygen命令用于为ssh生成、管理和转换认证…
ssh-keygen 命令详解
ssh-keygen为ssh生成、管理和转换认证密钥,ssh-keygen命令用于为ssh生成、管理和转换认证密钥,它支持RSA和DSA两种认证密,SSH 密钥默认保留在 ~/.ssh 目录中。 如果没有 ~/.ssh 目录,ssh-keygen命令会使用正确的权限创建一个。
#命令语法
ssh-keygen [选项]
命令选项
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件
-C:添加注释,不指定,则comment内容默认为user@hostname
-f:指定用来保存密钥的文件名,不指定f参数,则默认存到~/.ssh/下,生成id_rsa和id_rsa.pub两个文件;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。rsa
-m: 指定生成的密钥文件中所使用的格式。在这种情况下,`-m PEM` 指定了生成的密钥文件将采用 PEM 格式。 SSH 支持多种不同的密钥格式,包括 PEM、OpenSSH 和 PKCS#8 等。基本示例
#以下 ssh-keygen 命令默认在 ~/.ssh 目录中生成 4096 位 SSH RSA 公钥和私钥文件。 如果当前位置存在 SSH 密钥对,这些文件将被覆盖。
ssh-keygen -m PEM -t rsa -b 4096
#使用ssh-kengen会在~/.ssh/目录下生成两个文件,不指定文件名和密钥类型的时候,默认生成的两个文件是
#id_rsa 私钥文件
#id_rsa.pub 公钥文件
#指定秘钥文件路径
ssh-keygen -t rsa -C 'rumenz@qq.com' -f ~/.ssh/github_id_rsa
#或者,在指定存放文件时输入一个新的文件名
#> Enter file in which to save the key(/Users/rumenz/.ssh/id_rsa):id_rsa_gitlab
#多个SSH key的管理的情况就需要指定秘钥文件名。ssh-keygen密钥是什么
密钥是一对由非对称加密方法生成的 公钥(public key) 和 私钥(private key),且每次生成后的公钥和私钥都是以一一对应,每个公钥有且仅有一个私钥。
其中公钥是可以公开发送的,使用公钥加密的信息必须使用对应的私钥才可以解密。
打开终端使用 ssh-keygen命令生成密钥,-t用于指定密钥的加密算法,一般可使用 DSA或 RSA算法,-C用来指定标识邮箱
Enter file in which to save the key (/home/username/.ssh/id_dsa):这里是输入您所期望密钥对生成后的目录,默认情况下可以在 $HOME/.ssh目录下找到,需要注意点的是,root用户与其他用户目录稍稍有点不同,其他用户在 /home/$username/.ssh目录下,而root目录在 /root/.ssh/。
Enter passphrase (empty for no passphrase):,输入加密的口令最短五个字符,这里我的理解就是随意输入一个加密的串,当然也可以不输入,默认空串
生成密钥以后,建议修改它们的权限,防止其他人读取。
$ chmod 600 ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa.pubchmod 是一个更改文件权限的命令,使用数字比较方便但不太好记,每位数字代表不同的域 第一位代表文件或目录所属用户、第二位代表文件或目录所属用户组、第三位代表其他所有用户
- 可运行 +x 数字代表是 1
- 可写 +w 数字代表是 2
- 可读 +r 数字代表是4
因此 6=2+4 即为只能读写
使用密钥对免密登录的步骤
- 客户端使用
ssh-keygen生成密钥对,命令可以使用ssh-keygen -t rsa -C "youremail@doamin.com",输入指纹是可选的。 - 将公钥
id_rsa.pub复制到目标服务器(服务端)$HOME/.ssh目录下,并更名为authorized_keys或者附加到authorized_keys中 - 重启目标服务器的ssh服务,这点很重要,可以使用
systemctl restart sshd - 客户端再次发送
ssh username@hostname即可直接登录
ssh-keygen –t rsa –C "git仓库邮箱"
测试登录
ssh -T git@github.com
生成SSH
ssh-keygen -t rsa
ssh-keygen:生成SSH私钥和公钥
-t:指定生成的加密算法
-C:描述配置config:
通常利用 ssh 连接远程服务器,一般都要输入以下类似命令:
ssh user@hostname -p port如果拥有多个 ssh 账号,特别是像我这种喜欢在终端里直接 ssh 登陆,又不用 PuTTY、SecureCRT之类的 ssh 客户端的,要记住每个ssh 账号的参数,比较浪费精力、时间。 还好 ssh 提供一种优雅且灵活的方式来解决这个问题,就是利用 ssh 的用户配置文件 config 管理 ssh 会话。ssh 的用户配置文件是放在当前用户根目录下的 .ssh 文件夹里(~/.ssh/config,不存在则新创建一个),其配置写法如下:
Host 别名
HostName 主机名
Port 端口
User 用户名
IdentityFile 密钥文件的路径
IdentitiesOnly 只接受SSH key 登录
PreferredAuthentications 强制使用Public Key验证
ProxyCommand "C:\\Program Files\\Git\\mingw64\\bin\\connect.exe" -S 127.0.0.1:10808 %h %p 使用代理转发ssh进入相关的配置后,就可以这样用 ssh 登陆服务器了:
ssh 别名
~/.ssh/config 文件:
Host github
HostName github.com
User git
IdentityFile C:\Users\maluyao\.ssh\github
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa.github
如果在Host字段设置为github,那就是能用别名登录,ssh git.com的时候不会主动使用别名github
如果设置为Host github.com ,那么ssh相应的GitHub.com就能自动匹配
就比如对于地址:git@github.com:maluyaotop/main.git
就需要:git clone git@github.com:maluyaotop/main.git
ssh://git@code.iflytek.com:30004/EDU_zhixue_pt/xq-parent/web-xq-parent/parent-register-h5.git| 地址 | 协议类型 | 格式结构 | 说明 |
|---|---|---|---|
git@github.com:maluyaotop/main.git | SSH (简写) | user@host:path/to/repo.git | 常见于 GitHub,紧凑简洁 |
ssh://git@code.iflytek.com:30004/EDU_zhixue_pt/... | SSH (完整 URI) | ssh://user@host:port/path/to/repo.git |
1. git@github.com:maluyaotop/main.git
使用了 SSH 简写格式
实际等价于:ssh://git@github.com/maluyaotop/main.git
没有显式指定端口,使用默认的 22 端口
适用于大多数托管平台(如 GitHub)
2. ssh://git@code.iflytek.com:30004/EDU_zhixue_pt/...
使用了 标准 SSH URI 格式
指定了自定义端口:30004
更适合企业内网、自建 GitLab/Git 服务器等针对github及gitlab分别生成公钥和私钥
ssh user@hostname -p port
ssh-keygen -t rsa -C "luohoufu@company.com" -f ~/.ssh/id_rsa.gitlab
ssh-keygen -t rsa -C "luohoufu@163.com" -f ~/.ssh/id_rsa.github
添加私钥
ssh-add ~/.ssh/id_rsa.gitlab
ssh-add ~/.ssh/id_rsa.github
ssh-add -l
ssh-add 命令用于将 SSH 私钥添加到 ssh-agent 的高速缓存中,以便后续的 SSH 连接可以自动使用这些私钥进行身份验证。
基本语法如下:
ssh-add [option] [keyfile]
一些常见的选项包括:
-l:列出当前在 ssh-agent 中缓存的私钥。 -d:从 ssh-agent 缓存中删除指定的私钥。 通过运行 ssh-add 命令,并提供私钥文件名作为参数,可以将私钥添加到 ssh-agent 缓存中,从而允许用户在不需要再次输入密钥密码的情况下进行 SSH 连接。
Linux配置SSH登录
如果无法登录,请检查权限:
.ssh目录:700
•.pub公钥文件:644
id_rsa私钥文件:600
authorized_keys:600ssh代理
你想通过 SSH 访问一个公司内网的主机(例如 ssh iflytek -T),但由于这是内网服务,你必须通过一个本地设置好的代理(端口为 10808)进行转发。
以下是你可以采用的方法,取决于你使用的代理类型(HTTP 代理 / SOCKS5 代理)。
✅ 情况一:你使用的是 SOCKS5 代理(最常见,很多内网穿透工具如 proxychains、v2ray, sshuttle 等都是 SOCKS5)
你可以使用 ProxyCommand 来配置 SSH,通过代理进行连接。
方法 1:使用命令行 + nc 或 connect-proxy 工具
安装必要的工具(任选其一):
nc(带-X 5支持 SOCKS5,部分版本如netcat-openbsd支持)- 或者:
connect-proxy工具
然后运行以下命令(以 SOCKS5 为例):
ssh -o "ProxyCommand=nc -x 127.0.0.1:10808 -X 5 %h %p" iflytek -T或者使用 connect-proxy:
ssh -o "ProxyCommand=connect-proxy -S 127.0.0.1:10808 %h %p" iflytek -T✅ 情况二:你使用的是 HTTP 代理
可以通过 connect-proxy 工具来实现 HTTP 代理转发:
ssh -o "ProxyCommand=connect-proxy -H 127.0.0.1:10808 %h %p" iflytek -T✅ 更优雅的方式:修改 ~/.ssh/config
为了不每次都输入复杂参数,你可以修改 SSH 配置文件:
nano ~/.ssh/config添加以下内容:
Host iflytek
HostName iflytek
ProxyCommand nc -x 127.0.0.1:10808 -X 5 %h %p
# 或者(如果是 HTTP 代理):
# ProxyCommand connect-proxy -H 127.0.0.1:10808 %h %p然后你只需要执行:
ssh iflytek -T我们就选一个稳定、简单的 第三方工具 来实现 SOCKS5 代理下的 SSH,适用于 Windows。
下面是几个可行且常用的工具推荐:
✅ 推荐工具 1:connect.exe(超轻量 SOCKS5/HTTP 代理转发器)
🔹 特点:
- 单个可执行文件(不到 100KB)
- 无需安装
- 支持 SOCKS5 和 HTTP 代理
- 可直接配合
ssh使用 - 开源:源自
connect.c
Git 自带的 connect.exe(最轻量)
如果你已经安装了 Git for Windows,那么实际上你已经拥有 connect.exe,不需要额外下载:
-
这个
connect.exe位于 Git 安装目录下,例如:C:\Program Files\Git\mingw64\bin\connect.exe -
各类博客和教程都提到,Git 自带的
connect.exe就可以直接用于 ProxyCommand 设置 -
Host iflytek HostName iflytek.company.internal ProxyCommand "C:\\Program Files\\Git\\mingw64\\bin\\connect.exe" -S 127.0.0.1:8868 %h %p
如果你的代理是 SOCKS5:
Host iflytek
HostName iflytek
ProxyCommand C:\Tools\connect.exe -S 127.0.0.1:8868 %h %p如果你的代理是 HTTP:
Host iflytek
HostName iflytek
ProxyCommand C:\Tools\connect.exe -H 127.0.0.1:8868 %h %pssh-copy-id
将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利
ssh-copy-id -u eucalyptus -i ~eucalyptus/.ssh/id_rsa.pub ssh usrname@192.168.x.xxxssh-agent
将口令保存在内存中
这两个命令可能会陌生一些,但也是咱们使用非对称密钥传输的重要工具,通常是在**密钥对生成时私钥(private key)增加了口令,因此无论是 scp/sftp/ssh均需要在私钥解密前,输入对应的口令。
每次使用私钥均需要输入口令,那不又回到最初的原点了,ssh-agent和 ssh-add就是来带你走出原点而设计的。
第一步,使用下面的命令新建一次命令行对话。
ssh-agent bash上面命令中,如果你使用的命令行环境不是 Bash,可以用其他的 Shell 命令代替。比如 zsh和 fish。
如果想在当前对话启用 ssh-agent,可以使用下面的命令。
$ eval `ssh-agent`
Agent pid 8627上面命令中,ssh-agent会先自动在后台运行,并将需要设置的环境变量输出在屏幕上,类似下面这样。
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-8nNIF0cc0eJn/agent.8934; export SSH_AUTH_SOCK;
SSH_AGENT_PID=8935; export SSH_AGENT_PID;
echo Agent pid 8935;eval命令的作用,就是运行上面的 ssh-agent命令的输出,设置环境变量。
第二步,在新建的 Shell 对话里面,使用 ssh-add命令添加默认的私钥(比如 ~/.ssh/id_rsa,或 ~/.ssh/id_dsa,或 ~/.ssh/id_ecdsa,或 ~/.ssh/id_ed25519)。
$ ssh-add
Enter passphrase for /home/you/.ssh/id_dsa: ********
Identity added: /home/you/.ssh/id_dsa (/home/you/.ssh/id_dsa)上面例子中,添加私钥时,会要求输入密码。以后,在这个对话里面再使用密钥时,就不需要输入私钥的密码了,因为私钥已经加载到内存里面了。
第三步,使用 ssh 命令正常登录远程服务器。
$ ssh username@remoteHost上面命令中,remoteHost是远程服务器的地址,ssh 使用的是默认的私钥。这时如果私钥设有密码,ssh 将不再询问密码,而是直接取出内存里面的私钥。
如果要使用其他私钥登录服务器,需要使用 ssh 命令的 -i参数指定私钥文件。
$ ssh –i OpenSSHPrivateKey remoteHost最后,如果要退出 ssh-agent,可以直接退出子 Shell(按下 Ctrl + d),也可以使用下面的命令。
$ ssh-agent -kssh-add对私钥口令的操作
如果添加的不是默认私钥,ssh-add命令需要显式指定私钥文件
$ ssh-add my-other-key-filemy-other-key-file就是用户指定的私钥文件。
-d参数从内存中删除指定的私钥。
$ ssh-add -d name-of-key-file-D参数从内存中删除所有已经添加的私钥。
$ ssh-add -D-l参数列出所有已经添加的私钥。
$ ssh-add -l为其他用户创建ssh密钥的步骤
## 密钥对可通过 ssh-keygen -t rsa -C ‘comment’ -f filename 生成。该命令通常在 /usr/bin 下,生成 2 个文件:filename(私钥) 和 filename.pub(公钥)。
## 切换为目标用户
su - 用户名
#如果已经是该用户操作先回到家目录
cd ~
#查看是否以前设置过密钥,没有.ssh文件的没有设置过密钥,有可以删除重设
ll -a
#生成密钥,按提示操作
ssh-keygen
#成功后
chmod -R 700 .ssh/ #注意权限!
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 .ssh/authorized_keys #注意权限!
#然后私钥文件同在.ssh目录下id_rsa,下载到本地,登陆时设置下即可
sz id_rsa
#会弹出文件目录选择框,自己选好位置下载好把服务器的删除即可
rm -f id_rsa这里需要注意,如果 authorized_keys 文件、HOME/.ssh 目录 或 $HOME 目录让本用户拥有者之外的用户有写权限,那么 sshd 就会拒绝使用 ~/.ssh/authorized_keys 文件中的 key 来进行认证。所以也就无法成功使用私钥登录。
npm设置代理
设置代理
#设置http代理
npm config set proxy http://proxy-server:port
#案例
npm config set proxy http://127.0.0.1:1080
#设置https代理
npm config set https-proxy https://proxy-server:port
#案例
npm config set proxy https://127.o.o.l:l080删除代理
npm config delete proxy
npm config delete https-proxy恢复官方 npm 源
npm config set registry https://registry.npmjs.org/检查配置是否恢复成功
npm config list评论
评论加载中……