ssh免密钥之上厕所
ssh服务简单介绍
SSH协议框架中最主要的部分是三个协议:
*传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性等的支持;
*用户认证协议(The User Authentication Protocol)则为服务器提供客户端的身份鉴别;
*连接协议(The Connection Protocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图来表示:
一,ssh建立链接过程
1.服务器上产生公钥
2.客户端带着私钥访问服务器
3.服务器上公钥返回给客户端,并且用自己的公钥和客户端发来的私钥生成key pair
4.客户端再次带着自己的私钥和服务器发来的公钥生成key pair访问服务器
5.服务器用自己的key pair和客户端的key pair进行比对,建立链接
注意:
在第一次链接的时候,会在本地生成密钥文件/.ssh/known_hosts(可以存放多个)
二,ssh生成密钥对过程
1.客户端 ssh-keygen -t dsa
生成2个文件,id_dsa(私钥),id_dsa_pub(公钥)
2.客户端 发送公钥到服务器端
3.客户端 带着公钥发送链接请求
4.验证公钥
5.服务器 用公钥加密质询,发送至客户端
6.客户端 用私钥解密质询
7.客户端 将解密后的质询发送回服务器
8.服务器 验证质询
9.验证通过,链接建立
三,sshd_config配置文件可修改地方
1.#Port 22
2.PermitRootLogin yes 默认是打开的,就是允许客户端用root链接
3.#PermitEmptyPasswords no 是否允许空密码
下面是可以解决链接慢
1.UseDNS no 拒绝域名解析
2.GSSAPICleanupCredentials no
四,客户端链接ssh基本语法
1.指定端口的链接,会跳到链接的机子上
ssh -p22 user@ip -p指定端口,默认即位22
2.在链接的机子上执行命令,不会跳到链接的机子上
ssh -p22 user@ip command
五,基于ssh加密的scp命令
1.推:scp -P22 /etc/file user@ip:/tmp -P这个指定端口是大写p
2.拉:scp -P22 user@ip:/tmp/file /etc/
3.参数介绍:
-r递归,表示拷贝目录
-p表示拷贝前后保持文件目录属性
-l limit限制速度
通常scp -P22 -rp 即可
4.scp每次都是全量的拷贝,不同于rsync的增量
六,基于ssh加密的sftp远程上传下载(不推荐用,因为可以使用命令)
1.sftp -oPort=22 user@ip oPort指定端口
2.上传本地文件到远程主机
当我们链接上的时候,可以通过ls查看当前目录文件
通过,put /etc/file /tmp 将本地的file上传到远程主机的/tmp目录
默认如果不加/tmp,发送到/root目录下
3.下载远程主机文件到本地
通过,get /etc/file /tmp 将远程主机上的file文件下载到/tmp下
默认如果不加/tmp,下载到我们开始执行链接命令的目录下
七,非交互式创建密钥
我们手动创建是通过,ssh-keygen -t dsa,然后回车
1.自动创建
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa > /dev/null 2>&1
2.将公钥发送到远程主机
ssh-copy-id -i .ssh/id_dsa.pub "-p22 user@ip"
发送过去后,远程主机会产生.ssh/authorized_keys文件,权限是600,本地会多出.ssh/known_hosts文件
八,提权执行
1.直接root账号,将sshd_config里面允许root登录
2.sudo提权实现没有权限的用户拷贝
首先,配置sudoers:
终端命令;visudo,相当于配置/etc/sudoers
## Allow root to run any commands anywhere
用户或者组 机器=授权角色 可执行命令
root ALL=(ALL) ALL
joker ALL=(ALL) /usr/bin/rsync
@group ALL=(ALL) ALL
user ALL=(ALL) NOPASSWD:ALL
解释:
第一个ALL代表机器,就是所有机器,第二个ALL代表所有角色,第三个ALL代表可以执行所有命令,NOPASSWD代表提权命令时不需要提示密码
然后,加载sudoers文件
visudo -C
最后,用joker用户通过基于ssh的rsync发送文件
用户或者组在执行授权的特殊权限命令时后格式为sudo 命令,切换到root格式为 sudo su - ,需要输入当前用户的密码,而不是root密码
ssh -p22 -t user@ip sudo rsync ~/hosts /etc/hosts
注意;
如果,提示命令找不到,很可能是环境变量导致
root下,echo $path
user下,echo $path
在user下,修改vi ~/.bash_profile,将/usr/local/sbin:/sbin:/usr/sbin加入进去
3.利用suid实现没有权限用户拷贝(了解即可)
chmod u+s 'which rsync'
附赠基于ssh的scp推送脚本
#!/bin/bash
if [ $# -ne 2 ];then
echo "usage:/bin/bash $0 {avg1 avg2}"
exit 1
fi
. /etc/init.d/functions
for ip in 1 2 3
do
scp -p22 file user@ip:/tmp > /dev/null 2&1
if [ $? -eq 0 ];then
action "fenfa hosts ip" /bin/true
else
action "fenfa hosts ip" /bin/false
fi
done
九,非交互模式产生密钥
1.yum install expect -y
2.mkpasswd -l 10
参数介绍,生成随机字符串,-l是指生成多少个字符
3.简单介绍expect的过程
首先,还是需要手动ssh-keygen生成私钥,公钥
然后,spawn ssh-copy-id -i id_dsa.pub "-p 22 user@ip"
expect {
"yes/no" {send "yes\r":exp_continue}
"*password" {send "123\r"}
}
expect eof
附赠基于expect免密钥分发脚本
#!/bin/bash
# The author is joker, which is used to manage the host.
expect_order=`which expect 1>/dev/null 2>&1`
if [ $? -eq 1 ];then
yum install expect -y
sleep 1
sh $0
else
Distribute(){
for IP in $(cat /service/script/distribute_ip.txt);do
Passwd=$1
USER=$2
expect -c "
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 $USER@$IP
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*password*\" {send \"$Passwd\r\";exp_continue}
\"*password*\" {send \"$Passwd\r\";}
}
"
if [ $? -eq 0 ];then
echo -e "\033[32m 绿色字,ssh $IP 链接成功 \033[0m"
else
echo -e "\033[31m 红色字,ssh $IP 链接失败,请检查原因 \033[0m"
fi
done
}
Distribute "Poppy1115" root
fi
###########################################
# distribute_ip.txt,注意该文件适合在同一个地区使用,内网互动,否则去除内网地址
# 外网地址 内网地址
ssh免密钥之上厕所的更多相关文章
- linux系统ssh免密钥登录配置
linux主机配置ssh免密钥登录,具体配置如下: 1.执行命令ssh-keygen -t rsa,生成公钥和私钥(具体步骤详见下图) 2.会在当前用户的家目录的.ssh/生成公钥和私钥, 3.执行s ...
- gitlab用户添加ssh免密钥认证后clone还是要求输入密码
今天在centos 7公网服务器上安装gitlab在配置ssh免密钥时遇到一个奇怪的事,正确添加了本机的公钥到gitlab账户上,进行clone时死活都要你输入密码gitlab使用yum安装的,之前在 ...
- 【大数据】设置SSH免密钥(转)
设置SSH免密钥 关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码. 这项操作可以在admin用户下执行,执行完毕公钥在/home/admin/.ssh ...
- ssh免密钥登陆的两种方式
ssh 免密钥登陆的两种方式第一种:直接使用命令复制过去ssh-copy-id root@192.168.3.113批量复制for i in {113..140}; do ssh-copy-id ro ...
- Linux机器之间SSH免密钥登录设置
SSH免密钥登录 私钥:密钥留在本机 公钥:密钥发给其他机 hadoop01 生成密钥: ssh-keygen -t rsa (密钥存放路径:/root/.ssh) id_rsa:私钥 id_rsa. ...
- [CentOS] SSH 免密钥登录
一.环境说明: 操作系统:CentOS-7-x86_64-Minimal-1611 虚拟机:VMware® Workstation 12 Pro:12.5.5 build-5234757 服务器:no ...
- 014-配置SSH免密钥登录
问题:client端需要免密钥登录服务器server如何配置?1.前提:客户端已安装openssh-client;服务端已安装openssh-server;服务器端22号端口已经打开2.需要密钥登录时 ...
- ssh免密钥登录一例问题
今天遇到一个奇怪的问题,在同一机器上创建的普通用户使用 ssh-copy-id -i .ssh/id_rsa.pub root@192.168.3.254 建立与root用户的免密钥通信,结果死活还是 ...
- SSH免密钥互信及企业案例
SSH远程免密码: 原理简述:客户端 创建公钥和私钥,公钥是锁,私钥是自己留在客户端的钥匙. 客户端将公钥(锁)发出到服务端,以后自己就能用客户端本地的私钥进行登陆,不用输入密码! 1.客户端,和服 ...
随机推荐
- FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(me
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(me ...
- 百度地图API---JS开发
百度地图API 开源地址:http://lbsyun.baidu.com/index.php?title=jspopular/guide/introduction#Https_.E8.AF.B4.E6 ...
- python3-连接MySQL(mysql.connector与MySQLdb区别)
import mysql.connector cnx = mysql.connector.connect(user='scott', password='tiger',host='127.0.0.1' ...
- windows下《Go Web编程》之Go命令
Go命令: go build 用于编译代码,默认会编译当前目录下的所以go文件.若只需编译某个文件,go build后加上文件名,如go build a.go. go build会忽略目录下以“_”或 ...
- spoj Minimax Triangulation
题解: dp+计算几何 F[i][j]表示第i-j条边的答案 然后转移一下 代码: #include<bits/stdc++.h> using namespace std; ]; ][]; ...
- Saiku相关异常处理(十五)
Saiku大概是我的第一个持续更博的技术点,希望自己能在这条研究saiku的道路上越走越远嘻嘻 这里我们来记录一下研究saiku时遇到的异常信息,这篇博客会保持持续更新的. 1. Java heap ...
- C语言冒泡(起泡)排序与选择排序的循环条件区别
冒泡排序(写法1): i = 0; i < n-1; ++i{ flag = true; j = 0; j < n-1-i; ++j{//从前面开始冒泡 if( arr[j] < a ...
- Android : 跟我学Binder --- (2) AIDL分析及手动实现
目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...
- 初始C#(二)
一 数组 定义:能存放任意多个同类型数据 声明与赋值:声明:数据类型[ ]变量名 赋值:变量名=new 数据类型[长度] ...
- python笔记14-三元运算符
a = 1b = 2#下面这个c = a if a>1 else b #和下面是一样的效果if a > 1: c = aelse: c = b #打印偶数s=[]nums = list(r ...