ポートフォワーディングとLinuxの高度な_OpenSSL詳細な実験

多数の実験をカバーするの意図、それを把握するようにしてください。
移動:_SSHポート実験の一歩前進セット

OpenSSLの

  • 三つの成分:
    openssl:多目的のコマンドラインツール、OpenSSLパッケージ
    libcrypto:暗号化アルゴリズムライブラリ、パケット-LIBSのOpenSSL
    libssl:SSLとTLSを実装するアプリケーションの暗号化モジュールライブラリ、パッケージNSS

  • 2つの動作モード:対話型のバッチモード

  • 暗号化
    対称暗号化:
    ツール:opensslのENC、GPGの
    アルゴリズム:3DES、AES、フグ、twofishです
    一方向の暗号化:
    ツール:md5sumは、SHA1SUM、sha224sum、sha256sum

  • MAC:メッセージ認証コードメッセージ認証コード、送信されたデータの整合性を保証するためのネットワーク通信メカニズム実現するための拡張アプリケーションの一方向の暗号化
    ブロック暗号を使用して操作の認証1. CBC-MACモードを
    2 HMACを:使用MD5またはSHA1アルゴリズム

opensslコマンド

openssl command ...

  • コマンドは次のようにすることができます:
  1. ENC:暗号化コーディング

    • 暗号化:( - 塩崩壊解読の結果、-a:base64エンコード)
      openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
    • 復号化:
      openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile
  2. DGST:データ概要

    • MD5の計算
      openssl dgst -md5 /PATH/SOMEFILE
      md5sum /PATH/TO/SOMEFILE
  3. passwdの:ユーザーのパスワードを生成します

    • ヘルプ:男性sslpasswd
      openssl passwd -1 –salt centos(8まで)
  4. ランド:乱数を生成します

    • ヘルプ:男sslrand
      openssl rand -base64|-hex NUM
      NUM:バイト数
  5. genrsa:鍵ペアの生成

    • 秘密鍵を生成します。
      (umask 077; openssl genrsa –out test.key –des 2048)
    • 暗号化鍵を復号化:
      openssl rsa -in test.key –out test2.key
    • 秘密鍵から公開鍵を抽出
      openssl rsa –in test.key –pubout –out test.key.pub
  6. 乱数ジェネレータ:疑似乱数
    /dev/random;ブロッキング、ナンス排気乱数のみエントロピープールを返す
    /dev/urandom:エントロピープールから乱数を返し、消耗乱数、擬似乱数を生成するソフトウェアを使用して、ノンブロッキング

SSH

SSH:セキュアシェル、22 / TCP、セキュアなリモートログイン

  • 特定のソフトウェア:
  1. OpenSSHの:契約のsshのオープンソース実装、CentOSのデフォルトのインストール
  2. dropbear:別のオープンソース実装

SSHプロトコルバージョン

  1. V1:;マン・イン・ミドルMAC CRC-32、危険に基づいて行わ
  2. V2:双方は、安全な方法を選択MACプロトコルをホスト
    RSAまたはDSAに基づいて認証を達成するために、行うにはDH鍵交換アルゴリズムに基づくを
  • 2つの方法でユーザーのログイン認証:
    (1)パスワードに基づいて
    (2)キーに基づいて

OpenSSHのご紹介

  • 関連のパッケージ:
    OpenSSHの
    OpenSSHの-クライアント
    のOpenSSH-サーバー
  • ツール:C / Sの構造
    Linuxクライアント:SSH、SCP、SFTP、sログイン
    Windowsクライアント:xshell、パテ、のSecureCRT、sshsecureshellclient
    サーバ:SSHD

sshクライアント

実績は、リモートシステムへのセキュアな暗号化されたアクセスを許可する
クライアントに公開鍵ファイル)ユーザーがリモートSSHサーバーを接続したときには、sshサーバは/etc/ssh/ssh_host*key.pub(CentOS7のデフォルトはssh_host_ecdsa_key.pubでコピーされます〜。/ SSH /中know_hosts。次の接続が自動的に対応する秘密鍵と一致します場合は、接続を拒否し、一致させることはできません

ssh [user@]host [COMMAND]

オプション 意味
-lのlogin_name ログイン名を指定します。
-pポート リモートサーバーは、ポートでリッスン
-b ローカルIP接続を指定します
-v デバッグモード
-C 圧縮
-バツ サポートX11転送
-t 強制仮想端末の割り当て
  1. SSHの設定ファイル:の/ etc / sshを/ ssh_configの
  2. 直接リモートコマンドの実行
[ ]$ ssh 192.168.88.65 'ip a'
[email protected]'s password:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:46:29:d8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.65/24 brd 192.168.88.255 scope global eth0
    inet6 fe80::20c:29ff:fe46:29d8/64 scope link
       valid_lft forever preferred_lft forever
  • 公開鍵交換
    ここに画像を挿入説明
  1. クライアントは、リンク要求を送信します
  2. (このステップは、クライアント・サーバの公開鍵を取得することです)、そのサーバーの公開鍵、およびセッションIDに戻ります
  3. クライアントは、鍵ペアを生成し、
  4. 彼自身の排他的またはセッションID、計算値RES、および公開鍵暗号化サーバとクライアントの公開鍵
  5. クライアント暗号化された値が与えRESを解読するために、サーバの秘密鍵で、サーバーに送信します
  6. 復号化された値またはセッションIDを持つ別のサーバー、クライアントの公開鍵は、(クライアントに公開鍵サーバーを与えるために、このステップを)計算されRES
  7. 決勝:それぞれの当事者が保有する3つのキー、自分のパブリック、プライベート、および互いの公開鍵のペア、すべての通信が暗号化されます後
  • SSH暗号化通信
    ここに画像を挿入説明

SSHログイン認証サービス
  1.ユーザー/パスワード
  キーに基づいて2

  • ログイン認証のユーザ名・パスワードに基づいて、
    ここに画像を挿入説明
  1. SSHクライアントが要求を開始し、サーバーがユーザーに公開鍵を送信します
  2. ユーザーは、公開鍵に基づいて、サーバーから送信されたパスワードを暗号化することができます
  3. バックサーバに暗号化された情報は、パスワードが正しい場合、復号化するための秘密鍵を持つサーバは、ユーザのログインが成功します
  4. 接続に成功した後、サーバの公開鍵は、に保存されます~/.ssh/know_hostsファイル
  5. サーバの公開鍵に保存されています/etc/ssh/ssh_host_rsa_key.pub

  • SSHキーベースのログイン認証サービス
    ここに画像を挿入説明
  1. まず、クライアント上のキーのペアを生成する(SSH-keygenは)
  2. そして、クライアントの公開鍵はssh-コピー-idがサーバーにコピー
  3. クライアントはIP、ユーザ名を含め、再び接続要求を送信すると
  4. 取得するために、クライアントのサービス要求の終了後、authorized_keysにに、見つけるIPおよびユーザの応答がある場合、例えば、ランダムな文字列を生成します。magedu
  5. サーバーは、暗号化するために、クライアントの公開鍵を使用してコピーし、クライアントに送信されます
  6. サーバによって送信されたメッセージを取得した後、クライアントは秘密鍵を復号化するために使用しますし、サーバーに復号化された文字列を送信します
  7. サービスは、クライアントから送信された文字列を終了し、前の試合と比較された後、合意された場合は、パスワードなしのログインを可能にします

scpコマンド

scp [options] SRC... DEST/

オプション 意味
-C 圧縮されたデータストリーム
-r 再帰的なコピー
-p 元のファイルの属性情報を保持
-q サイレント・モード
-P PORT 指定されたリモートホストのリスニングポート

rsyncコマンド

sshとrshのサービスが伝送などのセキュアシェル接続を使用して、高効率に基づいてリモートシステム間でファイルのコピーを実現します

  • 复制目录和目录下文件
    rsync -av /etc server1:/tmp
  • 只复制目录下文件
    rsync -av /etc/ server1:/tmp
选项 意义
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)

sftp命令

交互式文件传输工具,用法和传统的ftp工具相似,利用ssh服务实现安全的文件上传和下载

  • 使用ls cd mkdir rmdir pwd get put等指令,可用help获取帮助信息
  • sftp [user@]host
sftp [email protected]
sftp> help

ssh服务器

  • 服务器端:sshd, 配置文件: /etc/ssh/sshd_config
  • 常用参数:
Port        #指定端口,默认22
ListenAddress ip        #指定监听的IP
LoginGraceTime 2m       #登录输入密码的宽限时间
PermitRootLogin yes     #是否允许root登录
StrictModes yes         #检查.ssh/文件的所有者,权限等
MaxAuthTries 6          #最大授权
MaxSessions 10          #同一个连接最大会话
PubkeyAuthentication yes      #开启公钥验证
PermitEmptyPasswords no       #禁止空密码                   
PasswordAuthentication yes    #密码验证
GatewayPorts no               #网关端口
ClientAliveInterval           #检测非活跃周期,单位:秒
ClientAliveCountMax           #检测非活跃次数,默认3
UseDNS yes     #解析成域名提高速度可改为no
GSSAPIAuthentication yes      #提高速度可改为no
MaxStartups                   #未认证连接最大值,默认值10:30:100
Banner /path/file       #登录提示

#限制可登录用户的办法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups
  • ssh连接优化
vim /etc/ssh/sshd_config
      UserDNS no
      GSSAPIAuthentication no

ssh服务的最佳实践

  1. 建议使用非默认端口(Port)
  2. 禁止使用protocol version 1
  3. 限制可登录用户
  4. 设定空闲会话超时时长
  5. 利用防火墙设置ssh访问策略
  6. 仅监听特定的IP地址
  7. 基于口令认证时,使用强密码策略
    tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
  8. 使用基于密钥的认证
  9. 禁止使用空密码
  10. 禁止root用户直接登录
  11. 限制ssh的访问频度和并发在线数
  12. 经常分析日志lastb

drobear

实验:编译安装dropbear示例

ssh协议的另一个实现:dropbear

  • 源码编译安装:
  1. 安装开发包组:
    yum -y group install "Development Tools"
    可能还会差一个:yum -y install zlib-devel
  2. 下载dropbear-2019.78.tar.bz2
    wget https://matt.ucc.asn.au/dropbear/dropbear-2019.78.tar.bz2
  3. 解压:
    tar xf dropbear-2019.78.tar.bz2
  4. 查看说明
    cd dropbear-2019.78
    less INSTALL README
  5. 编译安装:
    ./configure
    make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
    make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
  6. 查看所带的命令:
    ls /usr/local/sbin/ /usr/local/bin/
  7. 查看帮助:
    dropbear -h
  8. 使⽤dropbearkey命令⽣成对应的公私钥:
    mkdir /etc/dropbear
    dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
  9. 使⽤dropbearkey命令⽣成数字签名:
    dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
  10. 前台运行
    dropbear -p :2222 -F –E
  11. 后台运行
    dropbear -p :2222
  12. 客户端访问:
    ssh -p 2222 [email protected]
    dbclient -p 2222 [email protected]

轻量级自动化运维工具

  1. pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具
    项目:http://code.google.com/p/parallel-ssh/
  2. pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 pdsh可以使用几种不同的远程shell服务,包括标准的“rsh”,Kerberos IV和ssh
    项目: https://pdsh.googlecode.com/
  3. mussh:Multihost SSH wrapper,是一个shell脚本,允许您使用一个命令在多个主机上通过ssh执行命令或脚本。 mussh可使用ssh-agent和RSA / DSA密钥,以减少输入密码
    项目:http://www.sourceforge.net/projects/mussh
    说明:以上工具都包含在EPEL源中

pssh工具

命令:pssh

并行ssh程序

选项 意义
–version 查看版本
-h 主机文件列表,内容格式”[user@]host[:port]”
-H 主机字符串,内容格式”[user@]host[:port]”
-A 手动输入密码模式
-i 每个服务器内部处理信息输出
-l 登录使用的用户名
-p 并发的线程数【可选】
-o 输出的文件目录【可选】
-e 错误输出文件【可选】
-t TIMEOUT 超时时间设置,0无限制【可选】
-O SSH的选项
-P 打印出服务器返回信息
-v 详细模式
  • 在node1上使⽤pssh命令获取node2主机的主机名
    pssh -H "172.20.1.102" -A -i hostname
  • 通过pssh批量关闭seLinux
    pssh -H [email protected] -i 'sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config'
  • 批量发送指令
    pssh -h host.txt -i setenforce 0
  • 当不支持ssh的key认证时,通过 -A选项,使用密码认证批量执行指令
    pssh -H [email protected] -A -i hostname
  • 将标准错误和标准正确重定向都保存至/app目录下
    pssh -H 192.168.1.10 -o /app -e /app -i "hostname"

命令:pscp

pscp功能是将本地文件批量复制到远程主机
pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote

选项 意义
-v 显示复制过程
-r 递归复制目录
  • 将本地curl.sh复制到/app/
#指定主机ip
pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
#指定ip列表host.txt
pscp.pssh -h host.txt /root/test/curl.sh /app/
#pscp.pssh -H 主机IP 要发送的文件 目的目录
  • 将本地多个文件批量复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
  • 将本地目录批量复制到/app/目录
pscp.pssh -H 192.168.1.10 -r /root/test/ /app/

pslurp命令

pslurp功能是将远程主机的文件批量复制到本地
pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local [本地名]

选项 意义
-L マシンの格納ディレクトリへのリモートホストからのダウンロードを指定して、ローカル名は、ローカルポストにダウンロードされます
-r 再帰的にコピーディレクトリ
  • 一括ダウンロードのpasswdターゲットサーバ/ダウンのアプリにファイル、および名前を変更したユーザ
pslurp -H 192.168.1.10 -L /app /etc/passwd user

おすすめ

転載: blog.csdn.net/weixin_42758707/article/details/93530398