We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
参考:
环境:
$ ssh -V
SSH(Secure Shell)作用:
$ ssh username@server
git push
SSH 登录语法:
这里登录的远程主机是我装在 macOS 虚拟机上 Ubuntu ,在 Ubuntu 终端上使用 ifconfig 即可查看局域网 ip 地址
ifconfig
$ ifconfig # ... inet addr:192.168.73.192 Bcast:192.168.73.255 Mask:255.255.255.0 # ...
回到本地电脑(这里是macOS)终端进行 ssh 连接。注意:fatli 是我在远程主机 ubuntu 的用户账号,请替换成自己主机的用户账号。
ssh
fatli
$ ssh fatli@192.168.73.192 fatli@192.168.73.192's password: Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64) # ... Last login: Mon Feb 11 11:56:54 2019 from 192.168.73.1 fatli@fatli-vm-ubuntu:~$
因为此处没有将本地主机(这里是macOS)公钥 ~/.ssh/id_rsa.pub 配置到远程主机(这里是局域网内的ubuntu) ~/.ssh/authorized_keys ,所以需要输入远程主机用户密码。
~/.ssh/id_rsa.pub
~/.ssh/authorized_keys
虚拟机(这里是 Ubuntu )得到以上 IP 地址( 192.168.73.192 )的网段 73 不同于宿主主机(这里是 macOS)的 IP 地址(192.168.31.58)的网段31,是因为,这里安装 Ubuntu 使用的虚拟机软件是 VMware Fusion ,虚拟机网络模式默认为 NAT 模式,所以分配了一个不同于宿主主机(这里是 macOS)网段的 IP 地址。 如果虚拟机(这里是 Ubuntu )除了对宿主主机(这里是 macOS )提供服务外,还需要对局域网其他电脑提供服务(例如提供 HTTP 或 FTP 或 SSH 服务),那么就要选择桥接模式。 虚拟机(这里是 Ubuntu )选择桥接模式:虚拟机资源库选中Ubuntu => 设置 => 网络适配器 => Internet共享 - 与我的 Mac 共享 => 切换为,桥接模式网络连接 - 选中 Wi-Fi 。
73
31
$ # 在虚拟机 Ubuntu 上操作 $ ifconfig # ... inet addr:192.168.31.126 Bcast:192.168.31.255 Mask:255.255.255.0 # ...
$ # 在宿主主机 macOS 上操作 $ ssh fatli@192.168.31.126 fatli@192.168.31.126's password: Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64) # ... Last login: Fri Nov 22 20:35:41 2019 from 192.168.31.58 fatli@fatli-vm-ubuntu:~$
SSH 提供了公钥登录,可以省去输入密码的步骤。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。即是,将本地主机公钥 ~/.ssh/id_rsa.pub 配置到远程主机 ~/.ssh/authorized_keys 。 使用 cat 命令,添加 id_rsa.pub 到 server 中的 authorized_keys 文件中,参见下面 实例1:SSH登录局域网内的电脑(公钥登录) 。
cat
登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥 ~/.ssh/id_rsa 加密后,再发回来。远程主机用事先储存的公钥 ~/.ssh/id_rsa.pub 进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
~/.ssh/id_rsa
默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。
~/.ssh
公钥 ~/.ssh/id_rsa.pub
私钥 ~/.ssh/id_rsa
如果没有现成的公钥和私钥,可以直接用 ssh-keygen 生成一对:
ssh-keygen
$ ssh-keygen
首先 ssh-keygen 会确认密钥的存储位置(默认是 ~/.ssh),一路回车即可。然后它会要求你输入两次密钥口令,要不要对私钥设置口令(passphrase)?如果担心私钥的安全,这里可以设置口令。如果你不想在使用密钥时输入口令,将其留空即可。
运行结束以后,在 /home/用户名/.ssh/ 目录下,会新生成两个文件: id_rsa.pub 和 id_rsa ,前者是你的公钥,后者是你的私钥。
/home/用户名/.ssh/
id_rsa.pub
id_rsa
注意:因为此时是使用 $ ssh username@server 登录 Ubuntu : ~ 等价 /home/用户名 ; 如果切换到 root 用户身份,~ 则等价 /root 。 使用 $ pwd 可以查看当前目录路径。 在 macOS 中: ~ 等价 /Users/用户名 。
~
/home/用户名
root
/root
$ pwd
/Users/用户名
将本地主机公钥 ~/.ssh/id_rsa.pub 配置到远程主机 ~/.ssh/authorized_keys ,实现公钥登录,无需输入远程主机用户密码。
# ssh密码登录远程主机后: fatli@fatli-vm-ubuntu:~$ cd ~/.ssh/ fatli@fatli-vm-ubuntu:~/.ssh$ ls known_hosts # cat > 文件名:创建文件并进入编辑模式(Control + D 2次退出编辑) fatli@fatli-vm-ubuntu:~/.ssh$ cat > authorized_keys ssh-rsa AAAAB3NzaC1yc2......ZDaKlsPOcHgSMKAfXXf9vd7D fatli@liqingquandeMacBook-Air.local fatli@fatli-vm-ubuntu:~/.ssh$ ls authorized_keys known_hosts fatli@fatli-vm-ubuntu:~/.ssh$ logout Connection to 192.168.73.192 closed. # 使用ssh公钥登录(不再需要输入远程主机用户密码) ➜ /Users/fatli > ssh fatli@192.168.73.192 Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64) # ... Last login: Wed Nov 20 22:20:59 2019 from 192.168.73.1
追加公钥 id 到服务器的 authorized_keys 文件中(不要使用 vim 直接添加 id_rsa.pub ):
$ cat >> authorized_keys # 粘贴 id_rsa.pub 中的公钥 id , Control + D 退出编辑
$ ssh -q -l ubuntu -p 22 <腾讯云 CVM IP 地址> # ssh登录腾讯云Ubuntu服务器
主要参数说明: -l 指定登入用户(这里的用户指的是服务器登录用户名 username@server) -p 设置端口号( 22 是 SSH 默认使用的端口号) -f 后台运行,并推荐加上 -n 参数 -n 将标准输入重定向到 /dev/null,防止读取标准输入 -N 不执行远程命令,只做端口转发 -q 安静模式,忽略一切对话和错误提示 -T 禁用伪终端配置
主要参数说明:
-l 指定登入用户(这里的用户指的是服务器登录用户名 username@server) -p 设置端口号( 22 是 SSH 默认使用的端口号) -f 后台运行,并推荐加上 -n 参数 -n 将标准输入重定向到 /dev/null,防止读取标准输入 -N 不执行远程命令,只做端口转发 -q 安静模式,忽略一切对话和错误提示 -T 禁用伪终端配置
-l
-p
-f
-n
-N
-q
-T
$ logout # 断开服务器连接
除了文件所有者外,其他用户不可读、写、执行 .ssh 目录及目录中的 authorized_keys ,这也很好理解,如果其他用户有了 .ssh 目录或目录下的 authorized_keys 读写权限:
.ssh
authorized_keys
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/id_rsa
查看文件权限:
$ ls -la
例如,当前使用 $ ssh username@server 登录 Ubuntu ,如果当前文件权限属于 root 用户,当前的 username 用户则无法进行读写等操作。 如需进行读写等操作,则需要切换到 root 用户( $ sudo passwd root 设置 root 密码 => $ su - 切换到 root 用户);或进入权限属于 username 用户的文件进行读写操作,例如 $ cd 进入 ~ (此时 ~ 等价 /home/username )。
username
$ sudo passwd root
$ su -
$ cd
/home/username
查看更多 Linux 文件权限: 鳥哥的 Linux 私房菜 - Linux 的檔案權限與目錄配置
收集所有需要登录的用户的本地主机公钥,即用户们的 ~/.ssh/id_rsa.pub 文件,把所有公钥导入到服务器的 ~/.ssh/authorized_keys 文件里,一行一个。( 因为此时是使用 $ ssh username@server 登录 Ubuntu : ~ 等价 /home/用户名 ) 公钥就是一段字符串,只要把它追加在 ~/.ssh/authorized_keys 文件的末尾就行了。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
参考:
环境:
SSH 只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是 OpenSSH,它是自由软件,应用非常广泛。使用
$ ssh -V
可查看到 macOS和Ubuntu 默认安装了 OpenSSH。SSH(Secure Shell)作用:
$ ssh username@server
登录远程主机。或者,可以通过 git ,向远程主机进行git push
提交代码等操作。SSH 登录语法:
一、SSH登录(密码登录)
实例:SSH登录局域网内的电脑(密码登录)
回到本地电脑(这里是macOS)终端进行
ssh
连接。注意:fatli
是我在远程主机 ubuntu 的用户账号,请替换成自己主机的用户账号。因为此处没有将本地主机(这里是macOS)公钥
~/.ssh/id_rsa.pub
配置到远程主机(这里是局域网内的ubuntu)~/.ssh/authorized_keys
,所以需要输入远程主机用户密码。附:虚拟机的桥接模式(与本文教程无关,可忽略)
虚拟机(这里是 Ubuntu )得到以上 IP 地址( 192.168.73.192 )的网段
73
不同于宿主主机(这里是 macOS)的 IP 地址(192.168.31.58)的网段31
,是因为,这里安装 Ubuntu 使用的虚拟机软件是 VMware Fusion ,虚拟机网络模式默认为 NAT 模式,所以分配了一个不同于宿主主机(这里是 macOS)网段的 IP 地址。如果虚拟机(这里是 Ubuntu )除了对宿主主机(这里是 macOS )提供服务外,还需要对局域网其他电脑提供服务(例如提供 HTTP 或 FTP 或 SSH 服务),那么就要选择桥接模式。
虚拟机(这里是 Ubuntu )选择桥接模式:虚拟机资源库选中Ubuntu => 设置 => 网络适配器 => Internet共享 - 与我的 Mac 共享 => 切换为,桥接模式网络连接 - 选中 Wi-Fi 。
二、SSH登录(公钥登录)
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。即是,将本地主机公钥
~/.ssh/id_rsa.pub
配置到远程主机~/.ssh/authorized_keys
。使用
cat
命令,添加 id_rsa.pub 到 server 中的 authorized_keys 文件中,参见下面 实例1:SSH登录局域网内的电脑(公钥登录) 。原理:
登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥
~/.ssh/id_rsa
加密后,再发回来。远程主机用事先储存的公钥~/.ssh/id_rsa.pub
进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。SSH 密钥位置:
默认情况下,用户的 SSH 密钥存储在其
~/.ssh
目录下。公钥
~/.ssh/id_rsa.pub
私钥
~/.ssh/id_rsa
生成 SSH 密钥:
如果没有现成的公钥和私钥,可以直接用
ssh-keygen
生成一对:首先
ssh-keygen
会确认密钥的存储位置(默认是~/.ssh
),一路回车即可。然后它会要求你输入两次密钥口令,要不要对私钥设置口令(passphrase)?如果担心私钥的安全,这里可以设置口令。如果你不想在使用密钥时输入口令,将其留空即可。运行结束以后,在
/home/用户名/.ssh/
目录下,会新生成两个文件:id_rsa.pub
和id_rsa
,前者是你的公钥,后者是你的私钥。注意:因为此时是使用
$ ssh username@server
登录 Ubuntu :~
等价/home/用户名
;如果切换到
root
用户身份,~
则等价/root
。使用
$ pwd
可以查看当前目录路径。在 macOS 中:
~
等价/Users/用户名
。实例1:SSH登录局域网内的电脑(公钥登录)
追加公钥 id 到服务器的 authorized_keys 文件中(不要使用 vim 直接添加 id_rsa.pub ):
实例2:SSH登录云服务器
三、设置 .ssh 目录和秘钥文件权限
除了文件所有者外,其他用户不可读、写、执行
.ssh
目录及目录中的authorized_keys
,这也很好理解,如果其他用户有了.ssh
目录或目录下的authorized_keys
读写权限:id_rsa
私钥,那私钥的保密性就荡然无存;ssh
登录。所以,使用
ssh
登录之前,应该在远程和本地主机上执行以下命令:查看文件权限:
例如,当前使用
$ ssh username@server
登录 Ubuntu ,如果当前文件权限属于root
用户,当前的username
用户则无法进行读写等操作。如需进行读写等操作,则需要切换到
root
用户($ sudo passwd root
设置 root 密码 =>$ su -
切换到root
用户);或进入权限属于username
用户的文件进行读写操作,例如$ cd
进入~
(此时~
等价/home/username
)。查看更多 Linux 文件权限:
鳥哥的 Linux 私房菜 - Linux 的檔案權限與目錄配置
收集所有需要登录的用户的本地主机公钥,即用户们的
~/.ssh/id_rsa.pub
文件,把所有公钥导入到服务器的~/.ssh/authorized_keys
文件里,一行一个。( 因为此时是使用$ ssh username@server
登录 Ubuntu :~
等价/home/用户名
)公钥就是一段字符串,只要把它追加在
~/.ssh/authorized_keys
文件的末尾就行了。The text was updated successfully, but these errors were encountered: