ssh (笔记)

注:以下是Unix-like的相关操作  Windows 并没有 ssh 的客户端程序,因此所有的程序windows都得要下载其他第三方软件才行

主要有 pietty, psftp 及 filezilla 等

putty/pscp/psftp 他们分别对应了 ssh/scp/sftp  Windows的相关软件操作 不做介绍

SSH 协议,在预设的状态中,本身就提供两个服务器功能:

1. 一个就是类似 telnet 的远程联机使用 shell 的服务器,亦即是俗称的 ssh ;

2. 另一个就是类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务。

非对称密钥系统

透过两把不一样的公钥与私钥来进行加密与解密的过程

公钥 (public key):提供给远程主机进行数据加密的行为,也就是说,大家都能取得你的公钥来将数据加密的意思;

私钥 (private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥是不能够外流的!只能保护在自己的主机上。

目前在 SSH 使用上,主要是利用 RSA/DSA/Diffie-Hellman 等机制喔!

ssh联机过程

1. 服务器建立公钥文件:

每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件, sshd 会主动去计算出这些需要的公钥文件,和主机自己需要的私钥文件

重装系统也会执行以上操作

2. 客户端主动联机要求:

若客户端想要联机到 ssh 服务器,则需要使用适当的客户端程序来联机,包括 ssh, pietty 等客户端程序;

3. 服务器传送公钥给客户端:

接收到客户端的联机要求后,服务器便将第一个步骤取得的公钥传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的!);

4. 客户端记录/比对服务器的公钥数据及随机计算自己的公私钥:

client第一次联机会把server的公钥文件记录到用户家目录内的 ~/.ssh/known_hosts 。

若已经记录过了,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客户端自己的公私钥数据;

密钥是随机运算产生于每次联机当中

5. 回传客户端的公钥数据到服务器端:

用户将自己的公钥传送给服务器。

此时服务器:『具有服务器的私钥与客户端的公钥』,

客户端则是: 『具有服务器的公钥以及客户端自己的私钥』

在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统。

6. 开始双向加解密:

(1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密;

(2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。

启动ssh服务

Unix-like 系统当中,默认就已经含有 SSH 的所有需要的软件了!其中包含了

可以产生密码等协议的LinuxOpenSSL软件和OpenSSH软件

服务端直接启动就是以 SSH daemon ,简称为 sshd 来启动

[[email protected] ~]# /etc/init.d/sshd restart

[[email protected] ~]# netstat -tlnp | grep ssh

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address  Foreign Address  State   PID/Program name

tcp        0      0 :::22          :::*             LISTEN  1539/sshd

客户端连接服务器 使用ssh指令

[[email protected] ~]# ssh [-f] [-o 参数项目] [-p 非正规埠口] [账号@]IP [指令]

选项与参数:

-f :需要配合后面的 [指令] ,不登入远程主机直接发送一个指令过去而已;

-o 参数项目:主要的参数项目有:

ConnectTimeout=秒数 :联机等待的秒数,减少等待的时间

StrictHostKeyChecking=[yes|no|ask]:预设是 ask,若要让 public key

主动加入 known_hosts ,则可以设定为 no 即可。

-p :如果你的 sshd 服务启动在非正规的埠口 (22),需使用此项目;

[指令] :不登入远程主机,直接发送指令过去。但与 -f 意义不太相同。

ssh 192.168.129.158                                                                                                                                                                                         1

The authenticity of host ‘192.168.129.158 (192.168.129.158)‘ can‘t be established.

RSA key fingerprint is b5:49:85:1e:6d:0d:81:2d:2d:ef:30:12:cd:36:0d:fe. 这一行后边的就是远程服务器的公钥指纹码

Are you sure you want to continue connecting (yes/no)? yes 输入 yes 将指纹码写入本地公钥记录文件 (~/.ssh/known_hosts)

Warning: Permanently added ‘192.168.129.158‘ (RSA) to the list of known hosts. 加入之后未来比对该服务器的正确性之用

登陆服务器执行指令之后立刻离开 常用在需要关闭远程服务器时使用

[[email protected]:~]  ssh -f  [email protected] find / &> ~/find1.log

[email protected]‘s password:

联机时自动在本地添加公钥 写程序脚本需要连接多台主机时比较有用

[[email protected]:~]ssh -o StrictHostKeyChecking=no [email protected]

Warning: Permanently added ‘192.168.129.158‘ (RSA) to the list of known hosts.

[email protected]‘s password:

如果服务器的ssh公钥变化(比如删除了服务器/etc/ssh/ssh_host_*文件 或重装系统后)那么客户端ssh联机时就会报错

因为本地存储的公钥(~/.ssh/know_host中对应ip后的数据)和服务器的公钥不同造成 此时只要删除本地know_host对应ip的行 重新连接写入即可

[[email protected]:~/shell] ssh [email protected]

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

46:69:89:d8:b7:e1:28:49:ac:4f:92:fd:8e:2d:a2:05.

Please contact your system administrator.

Add correct host key in /Users/Jade/.ssh/known_hosts to get rid of this message.

Offending RSA key in /Users/Jade/.ssh/known_hosts:42

RSA host key for 192.168.129.158 has changed and you have requested strict checking.

Host key verification failed.

sftp:使用ssh的通道(part22)模拟FTP的文件上传与下载

[[email protected]:~] sftp [email protected]

[email protected]‘s password:

Connected to 192.168.129.158.

sftp> 这里即可输入ftp相关的指令

针对远方服务器主机 (Server) 之行为
变换目录到 /etc/test 或其他目录 cd /etc/test
cd PATH
列出目前所在目录下的文件名 ls
dir
建立目录 mkdir directory
删除目录 rmdir directory
显示目前所在的目录 pwd
更改档案或目录群组 chgrp groupname PATH
更改档案或目录拥有者 chown username PATH
更改档案或目录的权限 chmod 644 PATH
其中,644 与权限有关!回去看基础篇!
建立连结档 ln oldname newname
删除档案或目录 rm PATH
更改档案或目录名称 rename oldname newname
离开远程主机 exit (or) bye (or) quit
针对本机 (Client) 之行为(都加上 l, L 的小写 )
变换目录到本机的 PATH 当中 lcd PATH
列出目前本机所在目录下的文件名 lls
在本机建立目录 lmkdir
显示目前所在的本机目录 lpwd
针对资料上传/下载的行为
将档案由本机上传到远程主机 put [本机目录或档案] [远程]
put [本机目录或档案]
如果是这种格式,则档案会放置到目前远程主机的目录下!
将档案由远程主机下载回来 get [远程主机目录或档案] [本机]
get [远程主机目录或档案]
若是这种格式,则档案会放置在目前本机所在的目录当中!可以使用通配符,例如:
get *
get *.rpm
亦是可以的格式!

注意上传文件夹的话需要OpenSSH 5.4即以上

scp:异地直接复制

[[email protected] ~]# scp [-pr] [-l 速率] file  [账号@]主机:目录名 <==上传

[[email protected] ~]# scp [-pr] [-l 速率] [账号@]主机:file  目录名 <==下载

选项与参数:

-p :保留原本档案的权限数据;

-r :复制来源为目录时,可以复制整个目录 (含子目录)

-l :可以限制传输的速度,单位为 Kbits/s ,例如 [-l 800] 代表传输速限 100Kbytes/s

将本地的shell目录 保留原本文件权限数据 复制到远程主机~/目录下

[[email protected]:~] scp -pr shell [email protected]:~/

[email protected]‘s password:

将远程文件复制到本地

[[email protected]:~] scp [email protected]:~/top.txt ./

[email protected]‘s password:

top.txt

sshd服务器详细设定

[[email protected] ~]# vim /etc/ssh/sshd_config

只要是预设有出现且被批注的(#)设定值为默认值

通常只是设置不允许root的ssh登录 ssh的版本设为V2 其余默认已经很好

制作不用密码立即登入的ssh用户

1. 客户端建立两把钥匙:利用的指令为 ssh-keygen 这个命令;

2. 客户端放置好私钥文件:将 Private Key 放在 Client 上面的家目录,亦即 $HOME/.ssh/ , 并且得要注意权限喔!

3. 将公钥放置服务器端的正确目录与文件名去:

最后,将那把 Public Key 放在任何一个你想要用来登入的服务器端的某 User 的家目录内之 .ssh/ 里面的认证文件即可完成整个程序。

为jade用户(新创建的)设置ssh的无需密码登录服务器

client操作

jade用户创建密钥文件

bash-3.2$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/Users/jade/.ssh/id_rsa):

Created directory ‘/Users/jade/.ssh‘.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /Users/jade/.ssh/id_rsa.

Your public key has been saved in /Users/jade/.ssh/id_rsa.pub.

The key fingerprint is:

94:6b:ad:7b:b5:77:0d:b1:fc:f3:34:77:18:23:53:cb [email protected]

注意目录和两个密钥文件的权限设定

bash-3.2$ ls -ld .ssh/; ls -l .ssh/

drwx------  4 jade  staff  136 11 23 14:32 .ssh/

total 16

-rw-------  1 jade  staff  1675 11 23 14:32 id_rsa

-rw-r--r--  1 jade  staff   404 11 23 14:32 id_rsa.pub

将公钥上传到服务器的用户家目录

bash-3.2$ scp ~/.ssh/id_rsa.pub [email protected]:~

server操作

/home/wanjiadi/下如果没有.ssh目录 手动创建 注意权限

[[email protected] ~]# mkdir .ssh;chmod 700 .ssh

将client端上传的公钥使用cat 新增到authorized_keys中

[[email protected] ~]# cat id_rsa.pub >> .ssh/authorized_keys

[[email protected] ~]# chmod 644 .ssh/authorized_keys

[[email protected] ~]# ls -l .ssh

-rw-r--r--. 1 jade jade 404 11月 23 18:34 authorized_keys

当你还想要登入其他的主机时,只要将你的 public key copy 到其他主机上面去,并且新增到某账号的 ~/.ssh/authorized_keys 这个文件中即可

建议安全设定

其实sshd的数据是加密的 所以在Internet上面传递时比较安全 至于sshd服务本身并不是那么安全 安全设定建议 以下三条

服务器软件本身的设定强化:/etc/ssh/sshd_config

# 修改 sshd_config 并且重新启动 sshd !

[[email protected] ~]# vim /etc/ssh/sshd_config

PermitRootLogin no  <==约在第 39 行,请拿掉批注且修改成这样

DenyGroups  nossh   <==底下这两行可以加在档案的最后面

DenyUsers   testssh

TCP wrapper 的使用:/etc/hosts.allow, /etc/hosts.deny

[[email protected] ~]# vim /etc/hosts.allow

sshd: 127.0.0.1 192.168.1.0/255.255.255.0 192.168.100.0/255.255.255.0

[[email protected] ~]# vim /etc/hosts.deny

sshd : ALL

iptables 的使用: iptables.rule, iptables.allow

[[email protected] ~]# vim /usr/local/virus/iptables/iptables.allow

iptables -A INPUT -i $EXTIF -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -i $EXTIF -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT

[[email protected] ~]# /usr/local/virus/iptables/iptables.rule

ssh进阶应用

非22端口启动ssh服务

很多 cracker 会使用扫描程序乱扫整个 Internet 的端口漏洞,这个 port 22 就是一个很常被扫描的端口

[[email protected] ~]# vim /etc/ssh/sshd_config
Port 4444
Port 4445  <==注意喔!要有两个 Port 的设定才行!
[[email protected] ~]# /etc/init.d/sshd restart

centos6.7直接就可以使用了 老版本可能会出现SELinux的错误 必须自行定一个SELinux的规则放行模块才行

# 1. 于 /var/log/audit/audit.log 找出与 ssh 有关的 AVC 信息,并转为本地模块

[[email protected] ~]# cat /var/log/audit/audit.log | grep AVC | grep ssh | \>  audit2allow -m sshlocal > sshlocal.te  <==扩展名要是 .te 才行

[[email protected] ~]# grep sshd_t /var/log/audit/audit.log | \>  audit2allow -M sshlocal  <==sshlocal 就是刚刚建立的 .te 文件名

******************** IMPORTANT ***********************To make this policy package active, execute:semodule -i sshlocal.pp   <==这个指令会编译出这个重要的 .pp 模块!

# 2. 将这个模块加载系统的 SELinux 管理当中![[email protected] ~]# semodule -i sshlocal.pp

#3. 再重新启动 sshd 并且观察埠口吧![[email protected] ~]# /etc/init.d/sshd restart[[email protected] ~]# netstat -tlunp | grep sshtcp        0      0 0.0.0.0:4444   0.0.0.0:*    LISTEN      7322/sshdtcp        0      0 0.0.0.0:4445   0.0.0.0:*    LISTEN      7322/sshdtcp        0      0 :::4444       :::*         LISTEN      7322/sshdtcp        0      0 :::4445       :::*         LISTEN      7322/sshd

联机方式指定端口

[Jade@localhost-3:~] ssh [email protected] -p4444

查看端口使用情况

[[email protected] ~]# netstat -tnp | grep 4444
tcp        0      0 192.168.129.158:4444     192.168.129.174:49988       ESTABLISHED 15879/sshd

rsync进行同步镜像备份

见rsync篇笔记

时间: 2024-08-09 06:35:23

ssh (笔记)的相关文章

ssh笔记整合

1.整合Spring和Hibernate框架JBOA数据库设计1.部门表2.雇员表3.职位表4.报销单表5.报销单明细表6.审核记录表2.SSH架构 1.Struts 2+Spring+Hibernate 2.以Spring作为核心框架,数据持久化使用 Hibernate完成,表现层使用Struts 2 3.Spring提供对象管理.面向切面编程等实用功能 4.通过Spring提供的服务简化编码.降低开发难度.提高开发效率 1.整合思路 1.逆依赖方向而行.由spring提供对象管理和服务 2.

SSH笔记

一.JSP与Servlet 1. 基础语法 1.1声明 <%! int i = 0; %> 1.2表达式 <%= i %> 1.3脚本段 <% sth %> 1.4 Page指令用于定义JSP文件中的全局属性 <%@page [language="java"][import=""]%> 1.5 include指令用于在JSP中包含一个静态文件,同时解析这个JSP文件中的JSP语句.<[email protecte

工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

上文中我们介绍<工作笔记2.软件开发常用工具> 从今天开始本文将教大家如何进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个独立配置:struts2. Hibernate. Spring 2)2个整合:整合Sring和struts2. 整合Spring和Hibernate 3)资源分类 开发包.软件.框架源码,已经共享到百度网盘:http://pan.baidu.com/s/1o6FkbA6 一.3个独立配置 1.Struts2: 1

SSH学习笔记

一.Struts        在没有学习SSH框架前,我们一般采用Jsp+java bean+servlet开发,这里就是MVC架构.而Struts其实就是替代了Servlet,我们知道Servlet在一般的开发中做控制页面跳转,同时调用系统的业务逻辑层.现在想想Struts是不是做一样的是?只是它能够更加的提高开发速度.我们Servlet开发时,是要创建一个Servlet其实就是继承了HttpServlet这个类.而现在Struts里面的Action也要集成一个ActionSupport类.

《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令

2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会改进,还没买的小伙伴们可以买第二版. 一.安装1.安装要求:控制服务器:需要安装Python2.6/2.7被管理服务器:需要安装Python2.4 以上版本,若低于Python2.5 需要安装pythonsimplejson;若启用了selinux,则需要安装libselinux-python 2.yum安装

初学者的SSH整合笔记

最近开始学习SSH,对三大框架有一些初步了解后便着手写一个Demo把它们整合在一起.由于本人基本靠自学,在网上下载的视频中SSH的版本都与本人自己下载的版本不同,有些基本配置甚至某些类已经舍弃,使得我在调试Demo的过程中一直报出一些异常,很是费解.因而记下这篇笔记,方便以后查看,以后在学习的过程中也会慢慢补充. 本人用到的版本:struts-2.3.16.3 + Spring-4.0.4 + hibernate-4.3.5 web.xml的改动: 1.配置struts2的标签库<taglib>

SSH框架搭建 笔记 (含spring注解驱动)

分类: web 开发2014-04-27 12:33 354人阅读 评论(0) 收藏 举报 框架springinterface注解 好久没有搭建框架了,今天整理下以前的知识,整合下SSH,没想到手生了,一时半会各种异常出来,经过一番挣扎后,终于搞出来了雏形, 下面是我做整合框架的笔记,如果大家开发过程中又遇到的情况,可以参考下 首先是包的结构,(命名不算正规哈~,临时写的仓促了点) 框架是基于JAR包的基础上构建的,所以必须必备的jar包必须先下好, 如图: 没有的可以在本文源代码里下: 搭建框

shell 脚本实战笔记(8)--ssh免密码输入执行命令

前言: ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓狂.本文讲解了两种方式, 一种借助expect脚本, 一种借助sshpass来实现. *) 借助expect脚本来实现1. expect不是系统自带的工具, 需要安装yum install expect -y 2. expect脚本的编写规则 1. [#!/usr/bin/expect] 告知系统脚

树莓派玩耍笔记4 -- 树莓派ssh党必备的配置

1. 关闭桌面显示 对于ssh 党,当然不需要系统花费资源在显示上. 所以我们先在 "raspi-conifg" 下选择默认启动为Text 启动(这好像也是Raspbian 的默认配置). 其次,我们还可以直接关闭HDMI 接口, 使用" /opt/vc/bin/tvservice -o " (直接使用 tvservice -o 亦可,如想了解更多请使用 tvservice --help 查阅此命令更多地使用方法)命令即可轻易做到. [email protected