下文统一操作从home目录开始进行操作
cd ~从openssh.com下载openssh源码包
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz下载x11-ssh-askpass x11口令对话框插件源码包,可选,如无需x11-ssh-askpass可通过修改spec文件跳过该源码包,原始下载路径 http://www.jmknoble.net/software/x11-ssh-askpass/无法访问。
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz验证文件签名,可选
#从openbsd下载签名公钥 wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc#导入公钥
[user1@localhost ~]$ gpg --import RELEASE_KEY.asc gpg: 已创建目录‘/home/user1/.gnupg’ gpg: 新的配置文件‘/home/user1/.gnupg/gpg.conf’已建立 gpg: 警告:在‘/home/user1/.gnupg/gpg.conf’里的选项于此次运行期间未被使用 gpg: 钥匙环‘/home/user1/.gnupg/secring.gpg’已建立 gpg: 钥匙环‘/home/user1/.gnupg/pubring.gpg’已建立 gpg: /home/user1/.gnupg/trustdb.gpg:建立了信任度数据库 gpg: 密钥 86FF9C48:公钥“Damien Miller (Personal Key) <djm@mindrot.org>”已导入 gpg: 密钥 11B5748F:公钥“Damien Miller <dmiller@vitnet.com.sg>”已导入 gpg: 密钥 691EF8DA:公钥“Damien Miller (Personal Key) <djm@mindrot.org>”已导入 gpg: 密钥 6D920D30:公钥“Damien Miller <djm@mindrot.org>”已导入 gpg: 合计被处理的数量:4 gpg: 已导入:4 (RSA: 1) gpg: 没有找到任何绝对信任的密钥#下载源码包签名
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz.asc#检验签名
[user1@localhost ~]$ gpg --verify openssh-8.3p1.tar.gz.asc openssh-8.3p1.tar.gz gpg: 于 2020年05月27日 星期三 11时06分28秒 CST 创建的签名,使用 RSA,钥匙号 6D920D30 gpg: 完好的签名,来自于“Damien Miller <djm@mindrot.org>” gpg: 警告:这把密钥未经受信任的签名认证! gpg: 没有证据表明这个签名属于它所声称的持有者。 主钥指纹: 59C2 118E D206 D927 E667 EBE3 D3E5 F56B 6D92 0D30 有“完好的签名”提示既文件与asc签名一致未被修改,密钥认证暂忽略。安装rpm-buiild包及其他编译需要的包
yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip添加askpass支持需要增加安装依赖包libXt-devel imake gtk2-devel
yum install libXt-devel imake gtk2-devel创建rpm-build工作目录,SOURCES放置源码包,SPECS放置配置文件
mkdir -p ~/rpmbuild/{SOURCES,SPECS}补充说明,rpmbuild下目录
BUILD 编译rpm包的临时目录 BUILDROOT 编译后生成的软件临时安装目录 RPMS 最终生成的可安装rpm包的所在目录 SOURCES 所有源代码和补丁文件的存放目录 SPECS 存放SPEC文件的目录(重要) SRPMS 软件最终的rpm源码格式存放路径将源码包拷贝至rpmbuild工作目录
cp ~/openssh-8.3p1.tar.gz ~/rpmbuild/SOURCES #如添加askpass支持 cp ~/x11-ssh-askpass-1.2.4.1.tar.gz ~/rpmbuild/SOURCES从源码包提取spec文件
tar -zxvf openssh-8.3p1.tar.gz openssh-8.3p1/contrib/redhat/openssh.spec cp ~/openssh-8.3p1/contrib/redhat/openssh.spec ~/rpmbuild/SPECS如无需askpass可通过修改spec文件参数跳过对x11-ssh-askpass源码包
# Do we want to disable building of x11-askpass? (1=yes 0=no) %global no_x11_askpass 1 # Do we want to disable building of gnome-askpass? (1=yes 0=no) %global no_gnome_askpass 1 #注释掉Source1 x11-ssh-askpass包引用 #Source1: http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-%{aversion}.tar.gz解决openssl-devel < 1.1报错
#注释掉BuildRequires: openssl-devel < 1.1 #BuildRequires: openssl-devel < 1.1编译无法通过,出现以下提示
错误:发现已安装(但未打包的)文件: /usr/libexec/openssh/ssh-sk-helper /usr/share/man/man8/ssh-sk-helper.8.gzRPM 构建错误: 发现已安装(但未打包的)文件: /usr/libexec/openssh/ssh-sk-helper /usr/share/man/man8/ssh-sk-helper.8.gz 验证发现自带spec文件为2018年最后更新,ssh-sk-helper为2019年12月新增,spec文件未%file中未包含该文件 修改spec文件 在%attr(0644,root,root) %{_mandir}/man8/ssh-pkcs11-helper.8*后追加
%attr(0755,root,root) %{_libexecdir}/openssh/ssh-sk-helper %attr(0644,root,root) %{_mandir}/man8/ssh-sk-helper.8*超多输出,只要最后是“+ exit 0”就是成功生成
生成后的文件存放在~/rpmbuild/RPMS 因为是在x86_64做的编译所以在 ~/rpmbuild/RPMS/x86_64 目录中 /home/user1/rpmbuild/RPMS/x86_64
[user1@localhost x86_64]$ ll 总用量 4536 -rw-rw-r--. 1 user1 user1 602772 6月 25 15:10 openssh-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 44312 6月 25 15:10 openssh-askpass-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 24696 6月 25 15:10 openssh-askpass-gnome-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 580532 6月 25 15:10 openssh-clients-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 2958016 6月 25 15:10 openssh-debuginfo-8.3p1-1.el7.centos.x86_64.rpm -rw-rw-r--. 1 user1 user1 419928 6月 25 15:10 openssh-server-8.3p1-1.el7.centos.x86_64.rpm [user1@localhost x86_64]$备份配置
mkdir ~/ssh_bak cp /etc/pam.d/sshd ~/ssh_bak/ cp /etc/ssh/ssh_config ~/ssh_bak/ cp /etc/ssh/sshd_config ~/ssh_bak/ cp /usr/lib/systemd/system/sshd* ~/ssh_bak卸载安装
如果openssh未被依赖可以直接将openssh卸载后安装
yum erase openssh yum -y localinstall openssh-8.3p1-1.el7.centos.x86_64.rpm openssh-server-8.3p1-1.el7.centos.rpm openssh-clients-8.3p1-1.el7.centos.rpm升级方式安装
#升级,如依赖程序有版本要求则需要同步升级,在SSH进程操作切记在验证登录成功前不要退出当前会话 yum -y localupdate openssh-8.3p1-1.el7.centos.x86_64.rpm openssh-server-8.3p1-1.el7.centos.x86_64.rpm openssh-clients-8.3p1-1.el7.centos.x86_64.rpm恢复备份
#恢复PAM设置 /bin/cp -f ~/ssh_bak/sshd /etc/pam.d/自打包未包含systemd管理服务的service文件,需要自行添加,因centos自带rpm包中包含原始包中不存在的sshd-keygen可能会出现未找到文件错误,请谨慎执行,如不使用service文件管理可以使用chkconfig管理sshd的开机启动。
#恢复启动文件,自行打包文件未包含.service,需使用旧版本的文件 /bin/cp -f ~/ssh_bak/sshd*.service /usr/lib/systemd/system/ /bin/cp -f ~/ssh_bak/sshd*.socket /usr/lib/systemd/system/修改key文件访问权限
#修改/etc/ssh/ssh_host_* 权限 chmod 400 /etc/ssh/ssh_host_*修改sshd_config
(sshd_config可能会被创建为sshd_config.rpmnew,cp sshd_config.rpmnew sshd_config后再修改,如果有其他配置请同步。)
#允许root登录,permitrootlogin yes PermitRootLogin yes #使用PAM UsePAM yesSecureCRT7.1密钥交换算法不在OpenSSH8.3默认列表中,XShell6无此问题 需要在配置文件中增加SecureCRT7.1支持的算法。
sshd -T | grep kexalgorithms>> /etc/ssh/sshd_config vi /etc/ssh/sshd_config #在KexAlgorithms添加 diffie-hellman-group14-sha1启动sshd
#systemd方式 systemctl enable sshd systemctl start sshd #chkconfig方式 chkconfig sshd on service sshd start验证登录 略 安装完成后建议进行一两次服务启停保障服务工作正常。
以root登录ssh 安装telnet服务,yum install telnet-server 关闭防火墙, systemctl stop firewalld 启动telnet服务 ,systemctl start telnet.socket 使用非root用户telnet登录,su root进行安装 安装完成验证ssh登录成功 登录ssh
#退出telnet进程,exit #启动firewalld, systemctl start firewalld #关闭telnet服务, systemctl stop telnet.socket #卸载telnet-server, yum erase telnet-server/etc/pam.d/sshd
[root@localhost ~]# cat /etc/pam.d/sshd #%PAM-1.0 auth required pam_sepermit.so auth substack password-auth auth include postlogin # Used with polkit to reauthorize users in remote sessions -auth optional pam_reauthorize.so prepare account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth session include postlogin # Used with polkit to reauthorize users in remote sessions -session optional pam_reauthorize.so prepare/usr/lib/systemd/system/sshd-keygen.service
[Unit] Description=OpenSSH Server Key Generation ConditionFileNotEmpty=|!/etc/ssh/ssh_host_rsa_key ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ecdsa_key ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ed25519_key PartOf=sshd.service sshd.socket [Service] ExecStart=/usr/sbin/sshd-keygen Type=oneshot RemainAfterExit=yes /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target/usr/lib/systemd/system/sshd@.service
[Unit] Description=OpenSSH per-connection server daemon Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.service After=sshd-keygen.service [Service] EnvironmentFile=-/etc/sysconfig/sshd ExecStart=-/usr/sbin/sshd -i $OPTIONS StandardInput=socket /usr/lib/systemd/system/sshd.socket [Unit] Description=OpenSSH Server Socket Documentation=man:sshd(8) man:sshd_config(5) Conflicts=sshd.service [Socket] ListenStream=22 Accept=yes [Install] WantedBy=sockets.targethttps://download.csdn.net/download/dimerchan/12551906