赞
踩
Secure Shell(SSH) (远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd
,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。
SSH分为客户端 openssh-client
和服务器 openssh-server
。
1、确认电脑上是否安装了客户端和服务器
2、安装客户端和服务器
sudo apt-get install openssh-client
sudo apt-get install openssh-server
3、确认ssh服务是否启动
# ssh的配置文件
cat /etc/ssh/sshd_config
# ssh服务的关闭
centos:service sshd stop
ubuntu:sudo /etc/init.d/ssh stop
# ssh服务的开启:
centos:service sshd start
ubuntu:sudo /etc/init.d/ssh start
# ssh服务的重启
centos:service sshd restart
ubuntu:sudo /etc/init.d/ssh restart
# 端口一般用 22
ssh -l<用户名> -p<端口> <目标机器IP>
ssh -lubuntu -p22 192.168.112.72
ssh <用户名>@<目标机器IP>
ssh ubuntu@192.168.112.71
# 默认利用当前宿主用户的用户名登录
ssh 192.168.1.100
# 发送命令到远程机器并执行
ssh ubuntu@192.168.1.100 "ls ~/"
可以通过 Ctrl+D
或者 exit
命令退出远程登录。
1、生成密钥
ssh-keygen -t rsa
直接按三次回车,之后会在用户的根目录下生成一个 .ssh 的文件夹。.ssh 文件夹下包含如下图的三个文件。
2、将公钥追加到 authorized_keys
文件中
authorized_keys
: 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥。
# 将公钥追加到authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 赋予 authorized_keys 文件权限
chmod 600 ~/.ssh/authorized_keys
或者直接执行下面的复制命令。
ssh-copy-id
会将公钥写到远程主机的 ~/.ssh/authorized_key
文件中。
# 写到本机的 authorized_key 文件中
ssh-copy-id ubuntu@localhost
# 写到远程机器的 authorized_key 文件中
ssh-copy-id ubuntu@192.168.112.71
3、验证免密登陆
ssh localhost
ssh ubuntu@192.168.112.71
# 如果用户名相同,可以省略用户名
ssh 192.168.112.70
4、公钥免密登陆原理
实现免密登陆就是通过这里的一对公钥私钥。
公钥放到需要免密登陆的远程服务器上,公钥加密用。
私钥就在本机,私钥解密用。
原理图2:
ssh登陆不能在命令行中指定密码。sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码。
它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。
其默认没有安装,需要手动安装,方法如下:
1、sshpass下载地址
http://sourceforge.net/projects/sshpass/ 下载为一个 tar.gz的压缩包。
2、安装
1)源码方式
tar -zxvf sshpass-1.05.tar.gz
cd sshpass-1.05
# 指定安装目录
./configure --prefix=/opt/sshpass
sudo make
sudo make install
# 添加到可执行程序的根目录,这样可以在任何位置使用sshpass命令
sudo cp /opt/sshpass/bin/sshpass /usr/bin/
2)包方式
sudo apt-get install sshpass
3、验证是否安装成功
用法介绍:
# 后跟密码
-p password
sshpass -p 123456 ssh ubuntu@192.168.112.71
#后跟保存密码的文件名,密码是文件内容的第一行
-f filename
cat 1.txt
123456
sshpass -f 1.txt ssh ubuntu@192.168.112.71
#将环境变量SSHPASS作为密码
-e
export SSHPASS=123456
sshpass -e ssh ubuntu@192.168.112.71
从命令行方式传递密码 -p指定密码:
sshpass -p '123456' ssh user_name@host_ip
sshpass -p '123456' scp root@host_ip:/home/test/t ./tmp/
远程执行多台主机命令:
# 远程主机IP yangqian@yangqian:~/myShell$ cat 1.txt 192.168.112.71 192.168.112.72 # 编写脚本 yangqian@yangqian:~/myShell$ cat a.sh #!/bin/bash for i in $(cat ~/myShell/1.txt) do echo $i sshpass -p123456 ssh root@$i 'ls -l' done # 执行脚本 yangqian@yangqian:~/myShell$ sh a.sh 192.168.112.71 total 4 -rw-r--r-- 1 root root 399 Aug 9 15:55 id_rsa.pub 192.168.112.72 total 4 -rw-r--r-- 1 root root 399 Aug 9 15:55 id_rsa.pub yangqian@yangqian:~/myShell$
密钥形式登录的原理是:利用密钥生成器制作一对密钥(一只公钥和一只私钥)。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。
下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。
ssh-keygen -m PEM -t rsa -b 4096 -f C:\ztest.pem
ssh-keygen -m PEM -t rsa -b 2048
1、制作密匙对:
[root@brace ~] # ssh-keygen -m PEM -t rsa -b 2048 <== 建立密钥对 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空 Enter same passphrase again: <== 再输入一遍密钥锁码 Your identification has been saved in /root/.ssh/id_rsa. <== 私钥 Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥 The key fingerprint is: SHA256:vfMD691TW5bF9tZHZYPsuQMWAoswwcz377glhXrov8w root@brace The key's randomart image is: +---[RSA 2048]----+ | ++. .. . . | | +o.. .. . o .o| | .... . o .oo| | ... o o =| | .S.o . .o=| | o .... o .O| | o oo.oo .++| | . +.o..+.... | | ..Eo.. o... | +----[SHA256]-----+
密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。
在 root 目录下生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。
2、在服务器上安装公钥
# 键入以下命令,在服务器上安装公钥
[root@brace ~]# cd .ssh
[root@brace .ssh]# ls
id_rsa id_rsa.pub
[root@brace .ssh]# cat id_rsa.pub >> authorized_keys
# 如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确
[root@brace .ssh]# chmod 600 authorized_keys
[root@brace .ssh]# chmod 700 ~/.ssh
3、设置 SSH,打开密钥登录功能
# 编辑 /etc/ssh/sshd_config 文件,进行如下设置:
# 表示允许 root 账户登录,但是不能以密码的方式登录,所以只能以公私钥的方式登录。
PermitRootLogin prohibit-password
# 禁用密码登录
PasswordAuthentication no
# 允许秘钥登录,一定要设置
PubkeyAuthentication yes
# Ubuntu 22.04 默认不支持RSA密钥类型,需要添加下面的配置
PubkeyAcceptedKeyTypes +ssh-rsa
重启 SSH 服务。
systemctl restart sshd
或
ubuntu
/etc/init.d/ssh restart
4、下载私钥
使用xshell直接打开密钥登录:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。