Настройка некоторое время назад jenkins publish over ssh обнаружил, когда jenkins Невозможно подключиться к серверу, проверено ssh Вы можете войти в систему как обычно, но scp Сообщить об ошибке subsystem request failed on channel 0
, Запишите идеи по устранению этой проблемы.
Конфигурации, влияющие на ssh, представляют собой не что иное, как следующее:
Общая идея состоит в том, чтобы попытаться найти ту же самую конфигурацию. server и client Выполните перекрестное сравнение, Найдите проблемные места, Включает следующие четыре роли: Эта неисправность находится в client-docker
существовать scp server-1
появиться, когда
Роль | Версия ОС | SSH-версия | Примечание |
---|---|---|---|
client-1 | Centos 7.9 | OpenSSH_7.4p1 | |
client-docker | docker container | OpenSSH_9.2p1 | fail |
server-1 | Centos 7.9 | OpenSSH_7.4p1 | fail |
server-2 | Centos 7.9 | OpenSSH_7.4p1 |
проверено, Помимо вышеперечисленных неисправностей,все client верновсе server осуществлять ssh или scp Нет никаких проблем, способный ssh На самом деле успех означает, что проблемные области оказались не такими, как мы ожидали ранее.
Это было бы загадочно, к счастью scp Команда обеспечивает -v
параметр, могу показать больше debug информация, Поэтому мы решили сделать исключение scp из debug информация и нормальность scp из debug информация для сравнения, Начни веселиться Найдите разницу
связь
(нормальная ситуация) client-1 scp server-1 из debug информация
# scp -v test app@server-1:/home/app/
......
debug1: Authentication succeeded (password).
Authenticated to 11.53.57.80 ([11.53.57.80]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: scp -v -t /home/app/
Sending file modes: C0644 0 test
Sink: C0644 0 test
test 100% 0 0.0KB/s 00:00
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 2120, received 2344 bytes, in 0.2 seconds
Bytes per second: sent 12262.0, received 13557.6
debug1: Exit status 0
(нормальная ситуация) client-docker scp server-2 из debug информация
# scp -v test app@server-2:/home/app/
......
Authenticated to 11.53.57.74 ([11.53.57.74]:22) using "password".
debug1: channel 0: new session [client-session] (inactive timeout: 0)
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: filesystem
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: client_input_hostkeys: searching /root/.ssh/known_hosts for 11.53.57.74 / (none)
debug1: client_input_hostkeys: searching /root/.ssh/known_hosts2 for 11.53.57.74 / (none)
debug1: client_input_hostkeys: hostkeys file /root/.ssh/known_hosts2 does not exist
debug1: Sending environment.
debug1: channel 0: setting env LANG = "C.UTF-8"
debug1: Sending subsystem: sftp
debug1: client_global_hostkeys_prove_confirm: server used untrusted RSA signature algorithm ssh-rsa for key 0, disregarding
debug1: update_known_hosts: known hosts file /root/.ssh/known_hosts2 does not exist
debug1: pledge: fork
test 100% 0 0.0KB/s 00:00
scp: debug1: truncating at 0
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 3124, received 3084 bytes, in 0.0 seconds
Bytes per second: sent 88478.9, received 87346.1
debug1: Exit status 0
(ненормальная ситуация) client-docker scp server-1 из debug информация
# scp -v test app@server-1:/home/app/
......
Authenticated to 11.53.57.80 ([11.53.57.80]:22) using "password".
debug1: channel 0: new session [client-session] (inactive timeout: 0)
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: filesystem
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: client_input_hostkeys: searching /root/.ssh/known_hosts for 11.53.57.80 / (none)
debug1: client_input_hostkeys: searching /root/.ssh/known_hosts2 for 11.53.57.80 / (none)
debug1: client_input_hostkeys: hostkeys file /root/.ssh/known_hosts2 does not exist
debug1: Sending environment.
debug1: channel 0: setting env LANG = "C.UTF-8"
debug1: Sending subsystem: sftp
debug1: client_global_hostkeys_prove_confirm: server used untrusted RSA signature algorithm ssh-rsa for key 0, disregarding
debug1: update_known_hosts: known hosts file /root/.ssh/known_hosts2 does not exist
debug1: pledge: fork
subsystem request failed on channel 0
scp: Connection closed
Исключив избыточность, мы можем найти:
Sending environment
Следующие шаги Sending command: scp -v -t /home/app/
Sending environment
Следующие шаги Sending subsystem: sftp
Sending environment
Следующие шаги Sending subsystem: sftp
, но subsystem request failed
Можно сделать вывод, что проблемная точка существует. scp из Вызывается в процессе sftp, Но потому что sftp из Некоторые причиныпривести Что-то пошло не так
Поэтому я пошел сравнивать их. server из ssh О конфигурации sftp из Конфигурация
нормальный server из Конфигурация
# grep -i 'sftp' /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/mysftp
ForceCommand internal-sftp
аномальный server из Конфигурация
# grep -i 'sftp' /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server
Вы можете видеть, что аномальный сервер sftp не включен.
удалять sftp из Перезагрузка после комментирования sshd, После повторной попытки все восстановилось, как и ожидалось.
На этом этапе мы можем определить, что проблема связана с использованием протокола sftp для передачи в scp, а sftp не включен на стороне сервера, что приводит к сбою scp.
Наконец, подтвердите, почему scp позвоню sftp, существовать openssh 9.0p1 release Нашёл следующее описание:
This release switches scp(1) from using the legacy scp/rcp protocol to using the SFTP protocol by default.
от 9.0p1 начинать, scp будет использоваться по умолчанию sftp осуществлять передачу, Можно использовать -O
вариант делает scp использовать legacy SCP protocol
передача
Вот и все