I can believe fly.

Tuesday, December 28, 2010

Linux下scp密钥问题

需求A机往Bscp操作

事件:要求运维的系统管理员给配个密钥,把公钥分配给B机。原以为他把公钥让我扔给B机的主人,而私钥他会配好,结果啥也没做, 啥也没配,也没说。结果,我杯剧:

情景

SSHA机,scp数据时出现如下错误:

Permission denied (publickey,gssapi-with-mic).

lost connection

咨询了一下,私钥放在哪。答案:本地(A)没放。好吧,我认,自个动手把私钥cpA机的某目录下如/home/ysl/cfg/ysl_key,并更改文件的权限:chmod 0600 /home/ysl/cfg/ysl_key

继续试着执行scp操作:

scp -r /data/tempdir/20101025 -i /home/ysl/cfg/ysl_key ysl@5.5.5.5:/data/ysldata

结果错误信息仍然存在。

那么,试着SSH一下:

ssh -i /home/ysl/cfg/ysl_key ysl@5.5.5.5: "ls -ld /data/ysldata"

很好,有正常信息出现,那为什么scp不行??

试着在scp时打印出相关日志,执行:

scp -vvv /data/tempdir/20101025/file -i /home/ysl/cfg/ysl_key ysl@5.5.5.5:/data/ysldata

日志中发现-i指定私钥不被识别,只会在当前账号的根目录去找/home/ysl/.ssh/id_rsa

继续试着执行cp /home/ysl/cfg/ysl_key /home/ysl/.ssh/id_rsa

然后重新scp操作,发现正常了。

结论

据同事给出scp的手册中说明-i identity_file的信息:

Selects the file from which the identity (private key) for RSA authentication is read. This option is directly passed to ssh(1).

相当于说-i是指定使用RSA的私钥。上面用到的私钥/home/ysl/cfg/ysl_key并不是RSA格式的,因此无效。

解决

1. 更找密钥,生成RSA格式的

2. 以某个要执行scp动作的账号按以下步骤操作(elian)

mkdir /elian/.ssh

chmod 0700 /elian/.ssh

cp /home/ysl/cfg/ysl_key /elian/.ssh/id_dsa

chown -R root:root /elian/.ssh

chmod 0600 /elian/.ssh/id_dsa



--
Elian
 
Configuration Manage Engineer
MSN: smallfish961@hotmail.com
Email: smallfish382+work@gmail.com

No comments: