원격 컴퓨터에 로그인하고 개인 및 공개 키를 만드는 bash 스크립트를 만드는 중입니다.
내 문제는 원격 시스템이 그다지 신뢰할 수 없으며 항상 작동하지 않는다는 것입니다. SSH 연결이 작동하는지 확인하는 bash 스크립트가 필요합니다. 나중에 사용하기 위해 실제로 키를 만들기 전에.
원격 컴퓨터에 로그인하고 개인 및 공개 키를 만드는 bash 스크립트를 만드는 중입니다.
내 문제는 원격 시스템이 그다지 신뢰할 수 없으며 항상 작동하지 않는다는 것입니다. SSH 연결이 작동하는지 확인하는 bash 스크립트가 필요합니다. 나중에 사용하기 위해 실제로 키를 만들기 전에.
답변:
ssh가 제공하는 반환 값으로 이것을 확인할 수 있습니다.
$ ssh -q user@downhost exit
$ echo $?
255
$ ssh -q user@uphost exit
$ echo $?
0
편집 : 또 다른 접근 방식은 nmap을 사용하는 것입니다 (키나 로그인 항목이 필요하지 않음).
$ a=`nmap uphost -PN -p ssh | grep open`
$ b=`nmap downhost -PN -p ssh | grep open`
$ echo $a
22/tcp open ssh
$ echo $b
(empty string)
그러나 메시지를 grep해야합니다 (nmap은 포트가 필터링되었는지, 닫혔는지 또는 열려 있는지 표시하기 위해 반환 값을 사용하지 않습니다).
EDIT2 :
당신은 SSH 포트의 실제 상태에 관심이 있다면, 당신은 대체 할 수 grep open
와 함께 egrep 'open|closed|filtered'
:
$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
완전하게.
ssh
다운 된 호스트로의 시도는 60 초와 같은 시간 초과 후에 만 실패 한다는 것을 언급하지 않습니다 . 이는 일부 사용에서는 금지 될 수 있습니다. 또한 호스트 이름이에 정의 된 경우 ~/.ssh/config
첫 번째 ssh
방법은 작동하지만 두 번째 nmap
방법은 Failed to resolve "<hostname>"
.
$?
입니까? etc
ssh -q user@downhost exit | echo $?
연결 결과를 echo로 파이프
다음과 같이 사용할 수 있습니다.
$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)
ssh 연결이 정상이면 "ok"를 출력합니다.
원격 폴더가 있는지 확인하거나 다른 파일 테스트가 실제로 있는지 확인하려면 다음을 수행하십시오.
if [ -n "$(ssh "${user}@${server}" [ -d "$folder" ] && echo 1; exit)" ]; then
# exists
else
# doesn't exist
fi
의 따옴표를 잊지 마십시오 "$(ssh ...)"
.
BASH 4+ 스크립트를 사용한 예 :
# -- ip/host and res which is result of nmap (note must have nmap installed)
ip="192.168.0.1"
res=$(nmap ${ip} -PN -p ssh | grep open)
# -- if result contains open, we can reach ssh else assume failure) --
if [[ "${res}" =~ "open" ]] ;then
echo "It's Open! Let's SSH to it.."
else
echo "The host ${ip} is not accessible!"
fi
https://onpyth.blogspot.com/2019/08/check-ping-connectivity-to-multiple-host.html
위 링크는 연결 확인을위한 Python 스크립트를 생성하는 것입니다. 비슷한 방법을 사용하고 다음을 사용할 수 있습니다.
ping -w 1 -c 1 "IP Address"
bash 스크립트를 작성하는 명령입니다.
여기서 잘못된 문제를 해결하려는 것 같습니다. ssh 데몬을 더 안정적으로 만들려고하지 않습니까? monit 과 같은 것을 실행 하여 데몬이 실행 중인지 확인하고 그렇지 않은 경우 다시 시작합니다 (sshd가 종료 된 뒤의 근본 문제를 찾을 시간을 제공). 아니면 네트워크 서비스가 번거 롭습니까? 를보십시오 man ifup
. 전체 망할 일이 당신을 폐쇄하는 것과 같은가요? 글쎄, 그것은 더 큰 문제입니다 ... 로그를 살펴보고 (syslog로 시작) 하드웨어 오류 또는 박스를 종료하는 서비스 (아마 온도 모니터?)를 찾으십시오.
스크립트를 내결함성으로 만드는 것은 좋지만 박스형 내결함성으로 만들고 싶을 수도 있습니다.
ssh-keygen
로컬 컴퓨터에서 키 쌍을 생성 한 다음ssh-copy-id
공개 키를 원격 컴퓨터에 복사하기 위해 실행 됩니다 . 당신은 일을 다르게하고있는 것 같습니다. 왜, 당신의 목표는 무엇입니까?