Você pode verificar isso com o valor de retorno que ssh fornece:
$ ssh -q user@downhost exit
$ echo $?
255
$ ssh -q user@uphost exit
$ echo $?
0
EDIT: Outra abordagem seria usar o nmap (você não precisa ter chaves ou coisas de login):
$ 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)
Mas você terá que fazer um grep na mensagem (o nmap não usa o valor de retorno para mostrar se uma porta foi filtrada, fechada ou aberta).
EDIT2:
Se estiver interessado no estado real do ssh-port, você pode substituí-lo grep open
por egrep 'open|closed|filtered'
:
$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
Apenas para ser completo.
ssh-keygen
para gerar um par de chaves na máquina local e, em seguida,ssh-copy-id
para copiar a chave pública para máquinas remotas. Parece que você está fazendo as coisas de forma diferente. Por que, qual é o seu objetivo?