嵌入式环境搭建之SSH

Author:tiger-john

Time:2013-6-20
mail:jibo.tiger@gmail.com
Blog:http://blog.csdn.net/tigerjb/article/details/9195759

转载请注明出处!

    快毕业了。临走前帮导师搭建了gerrit,git服务器,其中涉及ssh的知识,就总结了下。希望对大家有帮助

一、前言(ssh出世的原因)

万物有因就有果,既然ssh存在,就必然有它存在的理由!

许多网络程序,如telnet、rsh、rlogin或rexec,用明文(plain text)传送口令和秘密的信息,所以可利用任何连接到网络上的计算机监听这些程序和服务器之间的通信并获取口令和秘密信息。现在,telnet程序对于日常的管理工作是必不可少的,但是它又是不安全的,那么用什么来替代它呢?

二、 ssh简介

SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种***方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的"通道"。

最初SSH是由芬兰的一家公司开发的。ssh协议目前有SSH1和SSH2,SSH2协议兼容SSH1。目前实现SSH1和SSH2协议的主要软件有OpenSSH和SSH Communications Security Corporation公司的SSH Communications 软件。前者是OpenBSD组织开发的一款免费的SSH软件,后者是商业软件,因此在linux、FreeBSD、OpenBSD、NetBSD等免费类UNIX系统种,通常都使用OpenSSH作为SSH协议的实现软件。因此,本文重点介绍一下OpenSSH的使用。需要注意的是OpenSSH和SSH Communications的登陆公钥/私钥的格式是不同的,如果想用SSH Communications产生的私钥/公钥对来登入到使用OpenSSH的linux系统需要对公钥/私钥进行格式转换。

(将SSH2兼容格式的公钥转换成为Openssh兼容格式

ssh-keygen -i -f Identity.pub >>/root/.ssh/authorized_keys2

三.OpenSSH软件包含以下命令:

sshd ―― SSH服务端程序

sftp-server ―― SFTP服务端程序(类似FTP但提供数据加密的一种协议)

scp ―― 非交互式sftp-server的客户端,用来向服务器上传/下载文件

sftp ―― 交互式sftp-server客户端,用法和ftp命令一样。

slogin ――ssh的别名

ssh ――SSH协议的客户端程序,用来登入远程系统或远程执行命令

ssh-add ―― SSH代理相关程序,用来向SSH代理添加dsakey

ssh-agent ―― ssh代理程序

ssh-keygen ――sshpublic key 生成器

ssh-copy-id ----ssh将指定public key写入服务器authorized_keys

四、安装OpenSSH

Ubuntu下安装OpenSSH Server是无比轻松的一件事情,只需要一条命令即可:

sudo apt-getinstall openssh-server openssh-client

随后,Ubuntu会自动下载安装,并解决所有的依赖关系。

如果客户端是windows,建议SSH客户端使用putty软件,打开putty输入服务器的IP地址。如果一切正常的话,等一会就可以连接上了

五、生成ssh的key files

1.使用下面命令生成ssh key files

ssh-keygen –t dsa –C  user.email.com –f ~/.ssh/user.email.com

Generatingpublic/private dsa key pair.

#提示正在生成,如果选择4096长度,可能需要较长时间

Enter passphrase(empty for no passphrase):

#询问输入私钥密语,为了实现自动登陆,应该不要密语,直接回车

2.使用该命令后会在用户目录下的.ssh文件夹下生成user.email.pub(publick key file),user.email(private key file)。

现在你有一对密匙了:公用密匙要分发到所有你想用ssh登录的远程主机上去。

.ssh目录的权限必须是700,即除了用户自己,其他人没有任何读写察看该目录的权限,否则ssh服务器会拒绝登陆。

私钥必须是600权限,否则ssh服务器会拒绝用户登陆。

3.发布公用public key

在每一个你需要用SSH连接的远程服务器上,你要把你的公用密匙添加到服务器主机.ssh下的"authorized_keys"中。

cat  user.email.pub >> authorized_keys.

六、        使用ssh登录其他主机

ssh  hostname@ip

eg:  ssh 

Note:注意:

如果不输入hostname则默认使用的本地的主机名。

如果OpenSSH工作正常,你会看到下面的提示信息:

The authenticityof host [hostname] can't be established.

Key fingerprint is1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.

Are you sure youwant to continue connecting (yes/no)?

OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入"yes"。这将把这台主机的"识别标记"加到"~/.ssh/know_hosts"文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。

然后,SSH提示你输入远程主机上你的帐号的口令。输入完口令之后,就建立了SSH连接,这之后就可以像使用telnet那样使用SSH了。

七.配置SSH

1.配置客户端

OpenSSH有三种配置方式:命令行参数、用户配置文件和系统级的配置文("/etc/ssh/ssh_config")。命令行参数优先于配置文件,用户配置文件优先于系统配置文件。所有的命令行的参数都能在配置文件中设置。因为在安装的时候没有默认的用户配置文件,所以要把 "/etc/ssh/ssh_config"拷贝并重新命名为"~/.ssh/config"。

标准的配置文件大概是这样的:

[lots ofexplanations and possible options listed]

# Be paranoid bydefault

Host *

ForwardAgent no

ForwardX11 no

FallBackToRsh no

还有很多选项的设置可以用"man ssh"查看"CONFIGURATION FILES"

配置文件是按顺序读取的。先设置的选项先生效。

假定你在www.foobar.com上有一个名为"jibo"的帐号。而且你要把"ssh-agent"和"ssh-add"结合起来使用并且使用数据压缩来加快传输速度。因为主机名太长了,可以使用"fbc"作为"www.foobar.com"的简称。配置文件可以是这样的:

Host  fbc

User  jibo

HostName

IdentityFile  ~/.ssh/jibo.tiger@gmail.com

ForwardAgent yes

Compression yes
# Be paranoid by default
Host *
ForwardAgent no
ForwardX11 no
FallBackToRsh no
当输入"ssh fbc"之后,SSH会自动地从配置文件中找到主机的全名,用你的用户名登录并且用指定的密匙(IdentityFile)进行安全验证.用SSH连接到其它远程计算机用的还是"paranoid(偏执)"默认设置。如果有些选项没有在配置文件或命令行中设置,那么还是使用默认的"paranoid"设置。对于连接到www.foobar.com的SSH连接:"ForwardAgent"和"Compression"被设置为"Yes";其它的设置选项(如果没有用命令行参数)"ForwardX11"和"FallBackToRsh"都被设置成"No"。

其它还有一些需要仔细看一看的设置选项是:

l CheckHostIP yes

这个选项用来进行IP地址的检查以防止DNS欺骗。

l CompressionLevel

压缩的级别从"1"(最快)到"9"(压缩率最高)。默认值为"6"。

l ForwardX11 yes

为了在本地运行远程的X程序必须设置这个选项。

l LogLevel DEBUG

当SSH出现问题的时候,这选项就很有用了。默认值为"INFO"。

2.配置服务端的软件

SSH服务器的配置使用的是"/etc/ssh/sshd_config"配置文件,这些选项的设置在配置文件中已经有了一些说明而且用"man sshd"也可以查看帮助。

在默认的设置选项中需要注意的有:

l PermitRootLoginyes

最好把这个选项设置成"PermitRootLoginwithout-password",这样"root"用户就不能从没有密匙的计算机上登录。把这个选项设置成"no"将禁止"root"用户登录,只能用"su"命令从普通用户转成"root"。

l X11Forwarding no

把这个选项设置成"yes"允许用户运行远程主机上的X程序。就算禁止这个选项也不能提高服务器的安全因为用户可以安装他们自己的转发器(forwarder),请参看"man sshd"。

lPasswordAuthentication yes

把这个选项设置为"no"只允许用户用基于密匙的方式登录。这当然会给那些经常需要从不同主机登录的用户带来麻烦,但是这能够在很大程度上提高系统的安全性。基于口令的登录方式有很大的弱点。

l # Subsystem/usr/local/sbin/sftpd

把最前面的#号去掉并且把路径名设置成"/usr/bin/sftpserv",用户就能使用"sftp"(安全的FTP)了(sftpserv在sftp 软件包中)。因为很多用户对FTP比较熟悉而且"scp"用起来也有一些麻烦,所以"sftp"还是很有用的。而且2.0.7版本以后的图形化的ftp工具"gftp"也支持"sftp"。

八.拷贝文件

1.用”scp”拷贝文件

SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许拷贝文件,但是提供了一个"scp"命令。

(1)将本机文件复制到远程服务器上:

scp /home/jibo/test.txt       

/home/jibo/            本地文件的绝对路径

test.txt                           要复制到服务器上的本地文件

    远程服务器地址

/etc/squid                     将本地文件复制到位于远程服务器上的路径

(2)将远程服务器上的文件复制到本机

#scp  john@192.168.1.55:/usr/local/sin.sh  /home/jibo/tiger/

: 远程服务器的地址

/usr/local/sin.sh   :复制到本机的位于远程服务器上的文件

/home/jibo/tiger/  :将远程文件复制到本地的绝对路径

注意两点:

1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:

#scp -p 4588 john@www.abc.com:/usr/local/sin.sh/home/administrator

2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

九stfp

如果你习惯使用ftp的方式拷贝文件,可以试着用"sftp"。"sftp"建立用SSH加密的安全的FTP连接通道,允许使用标准的ftp命令。还有一个好处就是"sftp"允许你通过"exec"命令运行远程的程序。从2.0.7版以后,图形化的ftp客户软件"gftp"就支持"sftp"。

如果远程的服务器没有安装sftp服务器软件"sftpserv",可以把"sftpserv"的可执行文件拷贝到你的远程的家目录中(或者在远程计算机的$PATH环境变量中设置的路径)。"sftp"会自动激活这个服务软件,你没有必要在远程服务器上有什么特殊的权限。

十为X加上"加密通道"

如果你打算在本地计算机上运行远程SSH服务器上的X程序,那么登录到远程的计算机上,创建一个名为"~/.ssh/environment"的文件并加上这一行:

XAUTHORITY=/home/[remoteuser name]/.Xauthority

(如果在远程主机上你的家目录下不存在".Xauthority"这个文件,那么当用SSH登录的时候就会自动创建)。

比如启动一个X程序(xterm)可以这个命令:

ssh -f -X -l[remote user name] [remote machine] xterm

这将在远程运行xterm这个程序。其它的X程序也是用相同的方法。