openssh/dropbear使用与对比
使用并比较嵌入式常用的SSH解决方案openssh和dropbear。
1 openssh
openssh提供SSH服务,包括服务端sshd、客户端ssh、远程文件传输工具scp等一系列工具。
ssh协议有两个版本:
v1:基于CRC-32 做MAC,不安全;,一般用于实现主机认证。
v2:基于协议协商选择双方都支持的最安全的MAC机制。基于DH做密钥交换,基于RSA或DSA实现身份认证,从而实现无需输入账号面膜客户端通过检查服务器端的主机秘钥来判断是否能够继续通信。
认证方式有两种:基于口令的认证;基于密钥的认证。
1.1 Buildroot使能
Target packages -> Networking applications
->openssh
1.2 openssh框架
ssh作为客户端通过网络连接sshd提供的服务端。
/etc/init.d/S50sshd:启动sshd的脚本。
/usr/bin/ssh-keygen:用于OpenSSH身份验证密钥的生成、管理和转换。
通过ssh-keygen生成的秘钥:
/etc/ssh/ssh_host_dsa_key /etc/ssh/ssh_host_dsa_key.pub /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key.pub
ssh服务端和配置文件:
/usr/sbin/sshd
/etc/ssh/sshd_config
ssh客户端和配置文件:
/usr/bin/ssh
/etc/ssh/ssh_config
其他ssh相关工具:
/usr/bin/ssh-copy-id:以把本地主机的公钥复制到远程主机的authorized_keys文件上。
/usr/bin/ssh-add:通过ssh-add命令向ssh-agent注册本机的私钥。
/usr/bin/ssh-agent:ssh-agent的角色就是帮忙存储、查找并发送对应的指纹。
/usr/bin/ssh-keyscan:收集多个主机的SSH 公共密钥。
1.3 openssh配置
/etc/ssh/sshd_config是sshd启动时读取的配置文件。
#Port 22--ssh服务默认端口号。 #AddressFamily any #ListenAddress 0.0.0.0--监听本机所有IPV4的ip。 #ListenAddress ::--监听本机所有的IPV6的地址。 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging #SyslogFacility AUTH--使用AUTH记录日志。 #LogLevel INFO--log日志级别INFO。 # Authentication: #LoginGraceTime 2m--登陆宽限时长,默认2分钟不登录自动关闭。 #PermitRootLogin prohibit-password--是否支持管理员直接登陆。 #StrictModes yes--是否使用严格模式(严格检查用户的某些相关信息)。 #MaxAuthTries 6--最大尝试次数(6次以后终端断开)。 #MaxSessions 10--最大并发允许链接数(超过将拒绝)。 #PubkeyAuthentication yes--是否支持公钥认证。 AuthorizedKeysFile .ssh/authorized_keys #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # 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--是否支持空密码登陆。即用户没有密码。 # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #UsePAM no--是否使用PAM认证( 是一种统一认证框架)。 #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding no--是否转发图形界面请求(可以打开远程服务器图形界面)。 #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #UseDNS no--是否允许DNS反解,比较浪费时间一般更改为no。 #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path #Banner none # override default of no subsystems Subsystem sftp /usr/libexec/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server
/etc/ssh/ssh_config是ssh系统配置文件,对ssh的配置还可以通过命令行选项以及用户配置文件,他们的优先级为:
command line options > user-specific file > system-wide file。
# Host *--表示连接所有主机。 # ForwardAgent no # ForwardX11 no # PasswordAuthentication yes # HostbasedAuthentication no # GSSAPIAuthentication no # GSSAPIDelegateCredentials no # BatchMode no # CheckHostIP yes # AddressFamily any # ConnectTimeout 0 # StrictHostKeyChecking ask--严格的主机秘钥检查,即第一次连接时是否询问。 # IdentityFile ~/.ssh/id_rsa # IdentityFile ~/.ssh/id_dsa # IdentityFile ~/.ssh/id_ecdsa # IdentityFile ~/.ssh/id_ed25519 # Port 22--默认连接端口。 # Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc--加密时使用的加密机制。 # MACs hmac-md5,hmac-sha1,umac-64@openssh.com # EscapeChar ~ # Tunnel no # TunnelDevice any:any # PermitLocalCommand no # VisualHostKey no # ProxyCommand ssh -q -W %h:%p gateway.example.com # RekeyLimit 1G 1h
1.4 openssh使用
ssh登录:
ssh root@192.168.137.240
scp文件拷贝:
scp root@192.168.137.255:/bin/busybox .
sftp使用:
sftp root@192.168.137.236
MobaXterm使用时出现如下异常:
/etc/ssh_config line 1: Missing argument.
修改/etc/ssh_config文件的第一行为:
User "root"
2 dropbear
dropbear是一个支持SSH 2占用较小内存的SSH服务和客户端解决方案。
官网《Dropbear SSH (ucc.asn.au)》。
2.1 Buildroot使能
Target packages -> Networking applications ->dropbear
2.2 dropbear框架
/usr/bin/dropbearkey:秘钥生成工具。/usr/bin/dropbearconvert:openssh和dropbear秘钥转换工具。
/etc/init.d/S50dropbear:dropbear启动脚本。
/usr/sbin/dropbear:服务端工具。
/etc/dropbear/dropbear_rsa_host_key:生成的秘钥。
2.3 dropbear配置
dropbear的配置通过命令行进行:
Dropbear server v2019.78 https://matt.ucc.asn.au/dropbear/dropbear.html Usage: dropbear [options] -b bannerfile Display the contents of bannerfile before user login (default: none) -r keyfile Specify hostkeys (repeatable) defaults: rsa /etc/dropbear/dropbear_rsa_host_key ecdsa /etc/dropbear/dropbear_ecdsa_host_key -R Create hostkeys as required -F Don't fork into background -E Log to stderr rather than syslog -w Disallow root logins--进制root用户登录。 -G Restrict logins to members of specified group -s Disable password logins -g Disable password logins for root -B Allow blank password logins -T Maximum authentication tries (default 10) -j Disable local port forwarding -k Disable remote port forwarding -a Allow connections to forwarded ports from any host -c command Force executed command -p [address:]port Listen on specified tcp port (and optionally address), up to 10 can be specified (default port is 22 if none specified) -P PidFile Create pid file PidFile (default /var/run/dropbear.pid) -i Start for inetd -W <receive_window_buffer> (default 24576, larger may be faster, max 1MB) -K <keepalive> (0 is never, default 0, in seconds) -I <idle_timeout> (0 is never, default 0, in seconds) -V Version
3 openssh和dropbear对比
3.1 规格对比
openssh支持SSH v1和ssh v2,dropbear仅支持ssh v2。
3.2 占用资源对比
sshd尺寸明显大于dropbear:
-rwxr-xr-x 1 root root 211424 Dec 9 2023 /usr/sbin/dropbear -rwxr-xr-x 1 root root 640876 Dec 9 2023 /usr/sbin/sshd
dropbear由S50dropbear启动作为SSH服务端。当有一个SSH客户端接入,则创建两个进程。
234 1 root S 1908 0% 0% /usr/sbin/dropbear -R
280 234 root S 2232 0% 0% /usr/sbin/dropbear -R
281 234 root S 2232 0% 0% /usr/sbin/dropbear -R
286 234 root S 2232 0% 0% /usr/sbin/dropbear -R
287 234 root S 2232 0% 0% /usr/sbin/dropbear -R
openssh为每个连接客户端创建两个进程。
234 1 root S 5512 1% 0% /usr/sbin/sshd 241 234 root S 5936 1% 0% sshd: root@pts/0 243 234 root S 5628 1% 0% sshd: root@notty 245 243 root S 4968 1% 0% /usr/libexec/sftp-server 248 234 root S 5936 1% 0% sshd: root@pts/1 250 234 root S 5632 1% 0% sshd: root@notty 252 250 root S 4968 1% 0% /usr/libexec/sftp-server
综合来看dropbear占用的ROM和RAM都远小于openssh。