首先,想说句脏话,差,你害得我好苦啊。

最近在搞linux,发现每次登录都要输入用户名密码好麻烦,于是就想起了大学里面对的RSA对称加密生成密钥对登录linux系统。

1.用root身份登录新建一个账户(这里一隐藏了一个想死人bug,都是linux权限还不熟悉啊)

useradd git

passwd git 123456

2.修改sshd_config

vi /etc/ssh/ssh_cnfig(这里就不一个一个说了,直接上修改后的代码)

#$OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $


# This is the sshd server system-wide configuration file.  See

# sshd_config(5) for more information.


# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin


# The strategy used for options in the default sshd_config shipped with

# OpenSSH is to specify options with their default value where

# possible, but leave them commented.  Uncommented options change a

# default value.


#Port 22

#AddressFamily any

#ListenAddress 0.0.0.0

#ListenAddress ::


# Disable legacy (protocol version 1) support in the server for new

# installations. In future the default will change to require explicit

# activation of protocol 1

Protocol 2


# HostKey for protocol version 1

#HostKey /etc/ssh/ssh_host_key

# HostKeys for protocol version 2

#HostKey /etc/ssh/ssh_host_rsa_key

#HostKey /etc/ssh/ssh_host_dsa_key


# Lifetime and size of ephemeral version 1 server key

#KeyRegenerationInterval 1h

#ServerKeyBits 1024


# Logging

# obsoletes QuietMode and FascistLogging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV

#LogLevel INFO


# Authentication:


#LoginGraceTime 2m

#PermitRootLogin yes

#StrictModes yes

#MaxAuthTries 6

#MaxSessions 10


RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile.ssh/authorized_keys

#AuthorizedKeysCommand none

#AuthorizedKeysCommandRunAs nobody


# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts

#RhostsRSAAuthentication no

# similar for protocol version 2

#HostbasedAuthentication no

# Change to yes if you don't trust ~/.ssh/known_hosts for

# RhostsRSAAuthentication and HostbasedAuthentication

#IgnoreUserKnownHosts no

# Don't read the user's ~/.rhosts and ~/.shosts files

#IgnoreRhosts yes


# To disable tunneled clear text passwords, change to no here!

#PasswordAuthentication yes

#PermitEmptyPasswords no

PasswordAuthentication no


# Change to no to disable s/key passwords

#ChallengeResponseAuthentication yes

ChallengeResponseAuthentication no


# Kerberos options

#KerberosAuthentication no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

#KerberosGetAFSToken no

#KerberosUseKuserok yes


# GSSAPI options

#GSSAPIAuthentication no

GSSAPIAuthentication yes

#GSSAPICleanupCredentials yes

GSSAPICleanupCredentials yes

#GSSAPIStrictAcceptorCheck yes

#GSSAPIKeyExchange no


# Set this to 'yes' to enable PAM authentication, account processing,

# and session processing. If this is enabled, PAM authentication will

# be allowed through the ChallengeResponseAuthentication and

# PasswordAuthentication.  Depending on your PAM configuration,

# PAM authentication via ChallengeResponseAuthentication may bypass

# the setting of "PermitRootLogin without-password".

# If you just want the PAM account and session checks to run without

# PAM authentication, then enable this but set PasswordAuthentication

# and ChallengeResponseAuthentication to 'no'.

#UsePAM no

UsePAM yes


# Accept locale-related environment variables

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS


#AllowAgentForwarding yes

#AllowTcpForwarding yes

#GatewayPorts no

#X11Forwarding no

X11Forwarding yes

#X11DisplayOffset 10

#X11UseLocalhost yes

#PrintMotd yes

#PrintLastLog yes

#TCPKeepAlive yes

#UseLogin no

#UsePrivilegeSeparation yes

#PermitUserEnvironment no

#Compression delayed

#ClientAliveInterval 0

#ClientAliveCountMax 3

#ShowPatchLevel no

#UseDNS yes

#PidFile /var/run/sshd.pid

#MaxStartups 10

#PermitTunnel no

#ChrootDirectory none


# no default banner path

#Banner none


# override default of no subsystems

Subsystemsftp/usr/libexec/openssh/sftp-server


# Example of overriding settings on a per-user basis

#Match User anoncvs

#X11Forwarding no

#AllowTcpForwarding no

#ForceCommand cvs server

3.重启 /etc/init.d/sshd restart(方法几种,这里只说一种)

4.切换到git用户

su - git

5.生成密钥对

ssh-keygen -t rsa(一直enter,你也可以输入密钥的密码)

6.追加到.ssh/authorized_keys

echo `cat id_rsa.pub` >> authorized_keys

7.下载到windows

sz id_rsa id_rsa.pug

7.首先用putty登录(要想用putty登录必须要转换格式,否则是不行的,这里不解释为什么)

spacer.gifputty secure key login  linux_local_02

分别是保存公钥和私钥(注文件名想同后缀不同,放在同一目录下面)

8.利用putty登录(结果登录不上,让我找了一天的原因)

9.chmod 0700 .ssh chmod 0600 .ssh/authorized_keys

这样就可以了,否则一直报Server refused our key

10.工作中用putty的还是比较少,一直用securecrt登录,这个登录也是一样,只是用的是公钥(putty用的私钥,其实原理一样,只是各软件开发者,想法不一样),直接上图

putty secure key login  linux_local_03

还有其它登录也是一样的。

最后,如果大家想深入了解公私钥登录,请自己想相关文档,这里由于工作时间问题,就不一一介绍。在学习过程当中,一定要注意权限,我开始登录不是就是由于useradd增加用户账户的时候默认也给我组权限和文件权限设置不正确,还有要注意,putty支持的文件格式和securecrt文件格式和linux openssl文件的格式,否则容易搞混。结束,有问题你留言