저는 많은 drupal 사이트를 관리하고 있으며 drush를 사용하여 일부 작업을 자동화하려고 합니다. Drush는 로컬로 실행되며 사이트 별칭 구성에 지정된 옵션을 사용하여 SSH를 통해 원격 호스트에서 drush를 호출합니다. 저는 이러한 호출을 많이 하기 때문에 작업 속도를 높이기 위해 다음과 같이 SSH 구성과 함께 영구 SSH 연결을 사용합니다.
Host *
# see http://www.revsys.com/writings/quicktips/ssh-faster-connections.html
ControlMaster auto
ControlPath ~/tmp/%r@%h:%p
ControlPersist 3600
속도가 향상되었지만 다음 메시지도 나타납니다.
$ drush @alias drupal-directory webform
/var/local/www/example.com/htdocs/sites/all/modules/contrib/webform
Shared connection to 12.34.56.78 closed.
공유 연결에 대한 메시지는 내가 원하는 출력뿐만 아니라 stdout에도 있으므로(정말? stderr가 아닌 이유는 무엇입니까?) 스크립트에서 출력을 캡처하려고 하면 문제가 발생합니다.
directory=$(drush @$alias drupal-directory $module)
이미 열려 있는 연결을 기본 연결로 설정하고 싶지만 닫혀 있지 않은 것 같습니다. 그렇다면 Drush가 이 새로운 연결을 기본 연결로 명시적으로 만들고 닫을 수 있을까요? 연결 종료에 대한 메시지를 억제할 수 있는 방법이 있습니까?
[이 질문은 drupal/drush 맥락에 있지만 본질적으로 ssh에 관한 것이라고 생각합니다. 그럼 이 웹사이트가 맞는 걸까요? ]
편집하다:
-t
문제는 ssh 옵션이 사용되는 위치 와 관련된 것 같습니다 . 여러 지점에서 svn 비밀번호가 필요하기 때문에 이것을 사용하고 있는데, 그렇지 않으면 -t
비밀번호 프롬프트가 표시되지 않습니다. 어쩌면 이 팁이 사라지는 것을 막을 수 있는 다른 방법이 있을까요?
답변1
메시지 조건
~에 따르면이 부분은 OpenSSH 포팅 소스코드입니다.OpenSSH 8.7 이전에 이 메시지를 인쇄하려면 두 가지 조건이 필요합니다.
- 알다시피, pseudo-tty 할당이 활성화됩니다(-t).
- 로그 수준은 QUIET와 달라야 합니다.
OpenSSH 8.8부터 조건은 다음과 같습니다.
- 이전과 마찬가지로 pseudo-tty 할당(-t)을 활성화합니다.
- 로그 수준은 더 커야 합니다.
바라보다이번에 제출하세요OpenSSH 휴대용 에디션으로 변경되었습니다.
메시지를 억제하는 솔루션
- OpenSSH 8.8 이상으로 업그레이드
-o LogLevel=QUIET
명령줄 에 추가하세요ssh
.- ~/.ssh/config를 편집하고
LogLevel QUIET
관련Host
블록 아래에 추가하세요.
예를 들어 Docker 명령을 실행하기 위해 여러 서버에 연결하는 sh 스크립트에서 다음 줄을 사용합니다. 그 중 일부는 대화형일 수 있습니다.
SSH = "ssh -t -o LogLevel=QUIET"
경고: 모든 오류는 삭제됩니다.
이 방법의 단점은 SSH의 치명적인 오류도 억제한다는 것입니다.
$ ssh -t -o LogLevel=QUIET notexisting.notld ssh anotherone.notld
$
대안: 인쇄하는 대신 stderr 출력을 기록합니다.
stderr이 여전히 중요한 것으로 간주되는 경우 stderr을 syslog로 리디렉션하는 또 다른 접근 방식이 있습니다 ssh -t -y
(그러나 그렇게 하면 로그가 이러한 모든 메시지로 가득 차게 됩니다 Shared connection to <host> closed
).