Chinaunix首页 | 论坛 | 博客
  • 博客访问: 439856
  • 博文数量: 132
  • 博客积分: 2511
  • 博客等级: 大尉
  • 技术积分: 1385
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-11 15:10
文章分类

全部博文(132)

文章存档

2012年(18)

2011年(35)

2010年(60)

2009年(19)

分类: LINUX

2011-07-22 16:17:28

今天需要使用脚本自动上传某些文件到另一台机器,最简单的方法就是scp,但需要解决自动输入密码的问题。大概有两个解决方案:1,使用密钥登录;2,使用expect脚本;
机器上不支持expect,所以只有第一种方法可以用了。
之前在某公司实习时,我记得代码里有一部分是把收集的调试信息上传到指定的机器的,不过想不起来怎么弄的了。

另外,还有一招,用curl也可以实现不用交互式登录,直接上传文件到sftp服务器:
curl -T myfile -u username:password sftp://192.18.1.1/root/ -k
注意,远程目录后面的“/”,如果没有,curl会把目录名当作远程文件名来上传,可能会有问题。

查了一下用密钥登录的方法,记在下面。文章转自http://blogold.chinaunix.net/u1/40306/showart_343138.html

======================转帖开始===============

文档名称:ssh-不用密码即可登陆的ssh用户

 

服务器配置:192.168.0.8 redhat- 2.6.9-5.EL   192.168.0.6 redhat- 2.6.18-8.el5

 

文档地址: http://blog.chinaunix.net/u1/40306/

 

首先了解一下加密技术,加密技术通常通过所谓的一对公钥(public keys  private keys)进行加密与解密当SSH服务器主机启动后,主机会产生一个公钥,而客户在与服务器进行连接时,可以通过客户自行产生的密钥连接服务器而客户端在与服务器进行连接时,可以通过随机产生的密钥来连接服务器,也可以通过服务器提供的私钥来进行连接,这与连接时候加密版本有关,当数据由Server端传送到client时,这些数据先经过的公钥(public key)进行加密,所以在传输过程中这些数据是加密的,等这些经过公钥(public key)加密后,就可以通过所谓的私钥进行解秘。SSH有两种

版本的连接模式

      SSH version 1

     每台机器都可以使用RSA加密方式产生的一个1024位的RSA Key,这个RSA的加密方法来产生公钥与钥方法,version 1 的整个连接简单加密步骤如下:

1.                  每次SSH daemon(sshd)启动是时都产生一个768位的公钥(或server key)并放在Server

2.                  若有的客户请求连接,server会将这个公钥穿给客户,Client通过对比本身的RSA加密方法来确认这个公钥

3.                  Client接收这个768位的server key 之后 client自己会产生一个256位的私钥(host key,并且以加密方式将server key host key凑成完整的key

并把这传给server

4.                  之后进行连接就以这个1024位的key进行数据的传递

5.                  clinet端的256位是随机产生的,所以你本次连接于下次连接使用的Key是不一样的。

      SSH version 2

version 1 不同的是,version 2 中将不产生server key,所以,当client端连接到Server端是,两者通过Diffie-Hellman的密钥交换产生一个共享key,之后两者通过类似Blowfish的算法进行同步加密操作

 

了解完基本的原理以后我们来做不用密码即可以登陆的ssh用户

       我们可以把client产生的key复制到server中这样,以后client登陆server时,

       由于两者ssh要连接信号传递中就已经对比过key,因此可以直接进入数据传  输  接口而不用密码访问。

1.           首先在client上建立public Keyprivate key,需要使用ssh-keygen命令

     

[root@localhost .ssh]# ssh-keygen   –t  rsa

Generating public/private rsa key pair.

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

Enter passphrase (empty for no passphrase):                 <---enter

Enter same passphrase again:                             <---enter

Your identification has been saved in /root/.ssh/id_rsa.

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

The key fingerprint is:           

e8:8a:5e:ae:c7:13:45:d0:81:cd:3f:e6:1e:f8:88:5a 

 

                                       

2.                                    然后将Private Key 放在client上的宿主目录,一般放在/root/.ssh/目录中

并修改权限为user可读

3          最后,将Public Key 放在任何一个你想登陆主机server中的某user的宿主目录

 下的.ssh/子目录人证文件中即可。

4                                    现在192.168.0.6client 想连接到192.168.0.8上用ssh-keygen –t  rsa产生key

(-t参数是使用和种密码)这时在我的/root/.ssh/里边产生了三个文件分别是公钥

(id_rsa.pub)与私钥(id_rsa)另外要注意的就是id_rsa文件权限他必须是-rw------否则回不安全,id_rsa.pub就是公钥,把这个放到server目录上去用命令

 

[wds@localhost .ssh]#  sftp id_rsa.pub 

[wds@localhost .ssh]#  passwd

[wds@localhost .ssh]#  put  id_rsa.pub

[root@localhost .ssh]#  uploading id_rsa.pub to /root/.ssh/

[root@localhost .ssh]#  exit

然后到服务器上去192.168.0.8

[root@localhost .ssh]# ssh –l   root 192.168.0.8

[root@localhost .ssh]# cd /root/.ssh/

[root@localhost .ssh]#more id_rsa.pub >> authorized_keys 这样就可以了

[root@localhost .ssh]#

返回client192.168.0.6

[root@localhost .ssh]# exit

[root@localhost .ssh]# ssh 192.168.0.8

这样无需要密码直接登陆到服务器上了

阅读(2075) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~