linux 常用命令(三)ssh
linux 常用命令(三)SSH
一、SSH 安装及免密登陆
(1) SSH 安装并配置
CentOS 默认已安装了 SSH client、SSH server,打开终端执行如下命令进行检验
rpm -qa | grep ssh
如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装
若需要安装,则可以通过 yum 进行安装:
yum -y install openssh-clients openssh-server openssh
注:sshd 在 openssh-server,ssh 在 openssh-clients,ssh-keygen 在 openssh 中。
接着执行如下命令测试一下 SSH 是否可用:
ssh localhost
此时会有如下提示(SSH 首次登陆提示),输入 yes 。然后按提示输入密码,这样就登陆到本机了。
[root@master home]# ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
root@localhost's password:
Last login: Fri Apr 20 07:07:31 2018 from 192.168.2.1
但这样登陆是需要每次输入密码的,我们需要配置成 SSH 无密码登陆比较方便。
(2) SSH 免密登陆
首先在 client 端用 ssh-keygen 生成公私秘钥对,并将公钥追加到 server 端的 ~/.ssh/authorized_keys 文件中:
rm ./id_rsa* # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa # 会有提示,都按回车就可以
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
scp ~/.ssh/id_rsa.pub hadoop@192.168.2.110:/home/hadoop/.ssh # 将生成的公钥拷贝到远程服务器上
cat id_rsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限,否则无法登陆,亲测
ssh-copy-id hadoop@192.168.2.110 # 或直接远程授权,不需要拷贝
注意: 一定要 chmod 来一下,不然无法起作用。此时 client 再次 ssh server 就无需输入密码就可以直接登陆了。
1. sshd 在 openssh-server
2. ssh 在 openssh-clients
3. ssh-keygen 在 openssh
(3) SSH 配制
scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 slave1 上 hadoop 用户的密码(hadoop)。
sudo vim /etc/ssh/sshd_config
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
二、常用命令
scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/ # 远程拷贝
scp /home/hadoop/hadoop-2.7.6.tar.gz hadoop@slave1:`pwd` # 远程拷贝
ssh root@sdw2 'chown -R hadoop:hadoop /usr/local/hadoop' # 远程执行命令
三、踩过的坑
问题 1 :Authentication refused: bad ownership or modes for directory /home/oracle
/var/log/secure 日志看到是权限问题:Dec 21 14:54:55 SHLT-TB-ORACLEBAK sshd[12347]: Authentication refused: bad ownership or modes for directory /home/oracle (tailf /var/log/secure)
ssh -vvv 192.168.2.101 # 查看详细日志,用于排错
sshd为了安全,对属主的目录和文件权限有所要求。如果权限不对,则 ssh 的免密码登陆不生效。
用户目录权限为 755
rsa_id.pub 及authorized_keys权限一般为644
rsa_id权限必须为600。
四、互信脚本 - expect
用脚本实现 SSH 互信,依赖 expect 服务
yum install -y tcl tclx tcl-devel expect
4.1 expect 语法
vi ssh.sh
#!/usr/bin/expect
set timeout 30
spawn ssh test@192.168.140.111 # 执行 shell 命令
expect "password:"
send "pwd\r"
interact # 执行完成后保持交互状态,而不是退出远程终端
(1) [#!/usr/bin/expect] 注意:这一行需要在脚本的第一行。
(2) [set timeout 30] 单位:s。
(3) [spawn ssh test@192.168.140.111] spawn 用来传递交互指令。
(4) [expect "password:"] 判断上次输出结果里是否包含“password:”的字符串。
(5) [send "pwd\r"] 执行交互动作。
(6) [interact] 执行完成后保持交互状态,而不是退出远程终端。
useradd test
echo pwd | passwd --stdin test
执行 expect ssh.sh 后会登陆到 192.168.140.111 上。
4.2 ssh 互信脚本
#!/bin/expect
# 循环 1000 台机器的IP地址,生成密钥文件 authorized_keys
for ip in {cat ip.list}
do
ssh user@$ip ssh-keygen -t rsa &>/dev/null
expect{
"yes/no" { send "yes\r";exp_continue}
"password:"{send "$passwd\r";exp_continue}
}
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys &> /dev/null
exit
if [ !-f ~/.ssh/authorized_keys ]; then
touch ~/.ssh/authorized_keys
fi
ssh user@$ip cat ~/.ssh/authorized_keys >> ~/.ssh/authorized_keys &> /dev/null
expect {
"yes/no" { send "yes\r";exp_continue}
"password:"{send "$passwd\r";exp_continue}
}
done
# scp authorized_keys 文件到各台机器上面。
for ip in {cat ip.list}
do
scp ~/.ssh/authorized_keys user@$ip:~/.ssh/
expect {
"yes/no" { send "yes\r";exp_continue}
"password:"{send "$passwd\r";exp_continue}
}
done
每天用心记录一点点。内容也许不重要,但习惯很重要!
linux 常用命令(三)ssh的更多相关文章
- linux常用命令三
linux常用命令三 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 ...
- linux常用命令(三)
文件搜索命令 which 命令;可以用于查询某个命令所存在的路径,由此可知道谁可以使用它.附加可以看到命令的别名记录,就是在ls的时候会自动对文件夹上色.前面章节讲过. whereis 命令;可以找到 ...
- linux 常用命令(三)——(centos7)MySql 5.7添加用户、删除用户与授权
一.创建用户:以root用户登录到数据库进行用户创建 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 例如: CREATE US ...
- Linux常用命令(三)查看当前计算机各方面信息
1.查看cpu: top 2.查看当前linux版本:name -a 查看当前运行的内核版本:cat /pro/version 查看发行版本信息:cat /etc/issue 查看上面所有信息:lsb ...
- Linux 常用命令三 touch mkdir
一.touch命令 创建一个文件: wang@wang:~/workpalce/python$ ls wang@wang:~/workpalce/python$ .txt wang@wang:~/wo ...
- Linux Linux常用命令三
在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式. touch 创建文件或修改文件时间 touch [options] file-list 参数 file-li ...
- Linux第二篇【系统环境、常用命令、SSH连接、安装开发环境】
系统环境 我们知道Windows的出色就在于它的图形界面那一块,而Linux对图形界面的支持并不是那么友好-其实我们在Windows下对图形界面进行的操作都是得装换成命令的方式的! 当然了,我们在Ub ...
- Linux常用命令大全(三)
Linux常用命令大全(三) 文件类型 普通文件(文本文件.数据文件.可执行的二进制文件) 目录文件 同上 差别:由成对的"I节点号.文件名"构成的列表 设备文件 (字符设备.块设 ...
- Linux学习笔记 一 第三章 Linux常用命令
第三章Linux常用命令 一.文件处理命令 1.命令格式 2.目录处理命令:ls 3.目录处理命令:mkdir 4.文件处理命令: touch
随机推荐
- Java中Properties集合总结
一:定义 表示一个持久的集,可以存在流中或者从流中加载.用来读取Java的配置文件,在Java中为.properties为后缀名的文本文件. 二:特点 是 Hashtable子类,map集合方法都可以 ...
- Java用代码演示String类中的以下方法的用法
用代码演示String类中的以下方法的用法 (1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true (2)char charAt(int index): 返回索引上 ...
- Rx操作符
[Rx操作符] 1.Observable.from()方法,它接收一个集合作为输入,然后每次输出一个元素给subscriber: Observable.from("url1", & ...
- linux suse 同步时间
ntpdate 210.72.145.44 ip为中国(国家授时中心)
- 字符串相似度算法(编辑距离Levenshtein Distance)的应用场景
应用场景 DNA分析: 将DNA的一级序列如β-球蛋白基因的第一个外显子(Exon)转化为分子“结构图”,然后由所得“结构图”提取图的不变量,如分子连接性指数.以图的不变量作为自变量,再由相似度计算公 ...
- python reload(sys) 后无法输出
重新加载sys后,在idle里无法输出内容.出现这种情况,需要将sys的三个变量重新定义. 在重新载入sys之前,为三个变量赋值 a,b,c = sys.studin,sys.studout,sys. ...
- JMeter学习(四)参数化(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入 ...
- 每月IT摘录201901
技术 1.Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid:在其它的容器也许就不叫jsessionid了. 2.在 InnoDB 中,索引使用的数据结构是 ...
- matlab读取excel里的数据并用imagesc画图
把矩阵数据保存在excel里 比如文件为 a.xlsx 通过下面的程序读取 a=xlsread('\文件保存的目录\a.xlsx'); figure(1); imagesc(a) colormap(h ...
- docker使用以及dockerfile编写
一 docker常用命令 1. service docker start 2. docker images 显示所有镜像 3. docker ps [-a] 显示正在运 ...