linux 常用命令(三)SSH

一、SSH 安装及免密登陆

(1) SSH 安装并配置

CentOS 默认已安装了 SSH client、SSH server,打开终端执行如下命令进行检验

  1. rpm -qa | grep ssh

如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装

若需要安装,则可以通过 yum 进行安装:

  1. yum -y install openssh-clients openssh-server openssh

注:sshd 在 openssh-server,ssh 在 openssh-clients,ssh-keygen 在 openssh 中。

接着执行如下命令测试一下 SSH 是否可用:

  1. ssh localhost

此时会有如下提示(SSH 首次登陆提示),输入 yes 。然后按提示输入密码,这样就登陆到本机了。

  1. [root@master home]# ssh localhost
  2. The authenticity of host 'localhost (::1)' can't be established.
  3. ECDSA key fingerprint is bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
  4. Are you sure you want to continue connecting (yes/no)? yes
  5. Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
  6. root@localhost's password:
  7. Last login: Fri Apr 20 07:07:31 2018 from 192.168.2.1

但这样登陆是需要每次输入密码的,我们需要配置成 SSH 无密码登陆比较方便。

(2) SSH 免密登陆

首先在 client 端用 ssh-keygen 生成公私秘钥对,并将公钥追加到 server 端的 ~/.ssh/authorized_keys 文件中:

  1. rm ./id_rsa* # 删除之前生成的公匙(如果有)
  2. ssh-keygen -t rsa # 会有提示,都按回车就可以
  3. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  4. scp ~/.ssh/id_rsa.pub hadoop@192.168.2.110:/home/hadoop/.ssh # 将生成的公钥拷贝到远程服务器上
  5. cat id_rsa.pub >> authorized_keys # 加入授权
  6. chmod 600 ./authorized_keys # 修改文件权限,否则无法登陆,亲测
  7. 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)。

  1. sudo vim /etc/ssh/sshd_config
  2. RSAAuthentication yes # 启用 RSA 认证
  3. PubkeyAuthentication yes # 启用公钥私钥配对认证方式

二、常用命令

  1. scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/ # 远程拷贝
  2. scp /home/hadoop/hadoop-2.7.6.tar.gz hadoop@slave1:`pwd` # 远程拷贝
  3. 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)

  1. ssh -vvv 192.168.2.101 # 查看详细日志,用于排错

sshd为了安全,对属主的目录和文件权限有所要求。如果权限不对,则 ssh 的免密码登陆不生效。

  1. 用户目录权限为 755
  2. rsa_id.pub authorized_keys权限一般为644
  3. rsa_id权限必须为600

四、互信脚本 - expect

用脚本实现 SSH 互信,依赖 expect 服务

  1. yum install -y tcl tclx tcl-devel expect

4.1 expect 语法

  1. vi ssh.sh
  2. #!/usr/bin/expect
  3. set timeout 30
  4. spawn ssh test@192.168.140.111 # 执行 shell 命令
  5. expect "password:"
  6. send "pwd\r"
  7. 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] 执行完成后保持交互状态,而不是退出远程终端。

  1. useradd test
  2. echo pwd | passwd --stdin test

执行 expect ssh.sh 后会登陆到 192.168.140.111 上。

4.2 ssh 互信脚本

  1. #!/bin/expect
  2. # 循环 1000 台机器的IP地址,生成密钥文件 authorized_keys
  3. for ip in {cat ip.list}
  4. do
  5. ssh user@$ip ssh-keygen -t rsa &>/dev/null
  6. expect{
  7. "yes/no" { send "yes\r";exp_continue}
  8. "password:"{send "$passwd\r";exp_continue}
  9. }
  10. cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys &> /dev/null
  11. exit
  12. if [ !-f ~/.ssh/authorized_keys ]; then
  13. touch ~/.ssh/authorized_keys
  14. fi
  15. ssh user@$ip cat ~/.ssh/authorized_keys >> ~/.ssh/authorized_keys &> /dev/null
  16. expect {
  17. "yes/no" { send "yes\r";exp_continue}
  18. "password:"{send "$passwd\r";exp_continue}
  19. }
  20. done
  21. # scp authorized_keys 文件到各台机器上面。
  22. for ip in {cat ip.list}
  23. do
  24. scp ~/.ssh/authorized_keys user@$ip:~/.ssh/
  25. expect {
  26. "yes/no" { send "yes\r";exp_continue}
  27. "password:"{send "$passwd\r";exp_continue}
  28. }
  29. done

每天用心记录一点点。内容也许不重要,但习惯很重要!

linux 常用命令(三)ssh的更多相关文章

  1. linux常用命令三

    linux常用命令三 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 ...

  2. linux常用命令(三)

    文件搜索命令 which 命令;可以用于查询某个命令所存在的路径,由此可知道谁可以使用它.附加可以看到命令的别名记录,就是在ls的时候会自动对文件夹上色.前面章节讲过. whereis 命令;可以找到 ...

  3. linux 常用命令(三)——(centos7)MySql 5.7添加用户、删除用户与授权

    一.创建用户:以root用户登录到数据库进行用户创建 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 例如: CREATE US ...

  4. Linux常用命令(三)查看当前计算机各方面信息

    1.查看cpu: top 2.查看当前linux版本:name -a 查看当前运行的内核版本:cat /pro/version 查看发行版本信息:cat /etc/issue 查看上面所有信息:lsb ...

  5. Linux 常用命令三 touch mkdir

    一.touch命令 创建一个文件: wang@wang:~/workpalce/python$ ls wang@wang:~/workpalce/python$ .txt wang@wang:~/wo ...

  6. Linux Linux常用命令三

    在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式. touch 创建文件或修改文件时间 touch [options] file-list 参数 file-li ...

  7. Linux第二篇【系统环境、常用命令、SSH连接、安装开发环境】

    系统环境 我们知道Windows的出色就在于它的图形界面那一块,而Linux对图形界面的支持并不是那么友好-其实我们在Windows下对图形界面进行的操作都是得装换成命令的方式的! 当然了,我们在Ub ...

  8. Linux常用命令大全(三)

    Linux常用命令大全(三) 文件类型 普通文件(文本文件.数据文件.可执行的二进制文件) 目录文件 同上 差别:由成对的"I节点号.文件名"构成的列表 设备文件 (字符设备.块设 ...

  9. Linux学习笔记 一 第三章 Linux常用命令

    第三章Linux常用命令 一.文件处理命令 1.命令格式 2.目录处理命令:ls 3.目录处理命令:mkdir 4.文件处理命令: touch

随机推荐

  1. DNS域名解析中A、AAAA、CNAME、MX、NS、TXT、SRV、SOA、PTR各项记录的作用

    名注册完成后首先需要做域名解析,域名解析就是把域名指向网站所在服务器的IP,让人们通过注册的域名可以访问到网站.IP地址是网络上标识服务器的数字地址,为了方便记忆,使用域名来代替IP地址.域名解析就是 ...

  2. Trustin Lee

    Trustin Lee,MINA.Netty2通讯框架的作者韩国人,80年出生,8岁起在MSX迷你计算机上编写BASIC程序,爱好游戏编程以及使用汇编.C和C++解决编程问题,1998年获得韩国信息奥 ...

  3. windows环境安装zabbix客户端

    安装windows版zabbix客户端 一.下载客户端 在数据盘新建一个zabbix_agent目录 浏览器打开 https://www.zabbix.com/download_agents 选择”z ...

  4. oracle导入大sql文件

    最近遇到一个需要导入大SQL文件的问题,最先直接用SQL developer 导入大SQL文件,结果报IO Exception,只好采用sqlplus 导入,操作过程如下: sqlplus 用户名/密 ...

  5. SpringCloud报错:Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

    今天启动用eureka的服务消费者时,一直出现问题. SpringCloud报错: Caused by: org.springframework.context.ApplicationContextE ...

  6. python websocket网页实时显示远程服务器日志信息

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  7. leetcode 栈和队列类型题

    1,Valid Parentheses bool isVaild1(string& s) { // 直接列举,不易扩展 stack<char> stk; ; i < s.le ...

  8. hdoj1005(循环,找规律)

    Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...

  9. 最长公共子序列lcs 51nod1006

    推荐参考博客:动态规划基础篇之最长公共子序列问题 - CSDN博客  https://blog.csdn.net/lz161530245/article/details/76943991 个人觉得上面 ...

  10. gitbook的学习

    gitbook安装与使用之windows下搭建gitbook平台 最近需要在GitBook中去阅读电子书 安装nodejs cnpm安装gitbook 解压书籍文件,并cd到书籍文件目录 gitboo ...