web-dev-qa-db-fra.com

Comment rediriger les utilisateurs SSH vers une autre connexion SSH?

J'ai une personne qui aura besoin d'accéder à mon serveur SSH, mais je veux qu'elle ait un accès limité aux programmes. Tout ce qu'ils devraient utiliser, c'est ssh, pour se connecter à un autre serveur. Mon serveur est un point d'accès à un autre serveur. Je ne veux pas que cet utilisateur exécute des programmes autres que le programme ssh dont il a besoin pour accéder à l'autre réseau.

Idéalement, lorsqu'ils se connectent, ils sont redirigés vers un autre login SSH et ne disposent d'aucune autre option immédiate pour faire autre chose.

Aucun utilisateur SSH ne dispose d'autorisations root.

Comment pourrais-je être capable de le configurer? Je pense que je peux le faire avec leurs fichiers bashrc. Je vais écrire un script de connexion secondaire qui s'exécute lors de la connexion. Existe-t-il un moyen pour un utilisateur de se connecter à un serveur SSH et d'ignorer son fichier bashrc lors de la connexion? Y a-t-il un meilleur moyen que je devrais envisager?

5
j0h

Envisagez d'utiliser une directive ForceCommand dans sshd_config . Par exemple, j'utilise ceux-ci pour forcer des groupes d'utilisateurs sur un ensemble de serveurs:

_Match Group group1
       ForceCommand ssh -t group1.fqdn

Match Group="*,!local,!group2,!root"
       ForceCommand ssh -t group3.fqdn
_

Vous pouvez utiliser:

_Match User foo
    ForceCommand ssh -t target-Host
_
11
muru

Vous avez pensé à éditer le fichier bashrc. Je voudrais jeter un œil sur la possibilité de limiter leur accès à toutes les commandes bash autres que ssh. Ce lien contient de bonnes informations.

Une autre idée est de configurer un tunnel de passage ssh sans accès à un login. Ce lien pourrait également être utile. Cela pourrait être plus facile à configurer.

2
Carl Trask

Définissez simplement le shell de connexion de l'utilisateur sur un script Shell au lieu de bash ou sh contenant la syntaxe ssh sur un deuxième point de terminaison. Toutes les connexions, à moins qu'elles ne définissent explicitement un shell avec la syntaxe ss avec -s, seront redirigées comme vous l'avez demandé.

Je peux sortir des limites de BASHRC par diverses méthodes. Si vous vous attendez à ce qu’ils soient malveillants, assurez-vous qu’ils ne peuvent pas spécifier d’autre Shell lors de la connexion.

Trap utilisateur sigint afin qu'ils ne peuvent pas Ctrl + C out et vérifiez à la sortie de ssh le code de sortie 0, sinon quittez complètement ou réessayez indéfiniment. Votre choix.

2
Abyzl

Vous pouvez le faire de manière quelque peu transparente en forçant l'utilisateur à utiliser une ProxyCommand localement, en traitant votre propre serveur comme un SSH hôte bastion .

Sur votre serveur (le bastion), limitez l'utilisateur à nc comme suit dans sshd_config:

Match User restricted_usr
  ForceCommand nc -w 600 restricted_usr_vm 22

Sur le client (en supposant que OpenSSH) dans ~/.ssh/config:

Host myserver
  ProxyCommand ssh bastion nc -w 600 restricted_usr_vm 22

(Les utilisateurs Windows peuvent tiliser les proxies ssh via PuTTY en utilisant plink de PuTTY).

Cependant, grâce à votre ForceCommand, je suis à peu près sûr que la commande ssh est ignorée; ProxyCommand ssh bastion I am a bannana devrait avoir le même effet. Une connexion directe (sans ProxyCommand) de l'utilisateur entraînera un vidage SSH brut vers restricted_usr_vm.

Comme indiqué dans un commentaire pour une autre réponse ici , ForceCommand rendra très difficile la gestion de l'accès par clé SSH à l'hôte bastion. Je peux penser à deux solutions simples: (1) Installez une clé SSH sans mot de passe pour cet utilisateur sur le bastion qui autorise l'accès à l'hôte cible. La crontab de l'utilisateur sur le bastion est exécutée scp restricted_usr_vm:.ssh/authorized_keys ~/.ssh/ ou (2) Créez un formulaire Web (comme celui de GitHub) pour autoriser le téléchargement de ce fichier. (3) NFS peut également fonctionner, mais je ne l’aime pas trop car le répertoire .ssh pourrait être compromis par une personne ayant les droits root. (ou le même UID) sur tout système qui le monte.

J'ai posté un réponse très similaire (avec plus de détails sur ProxyCommand) à la question ServerFault très similaire proxy SSH basé sur un nom d'utilisateur .


J'aime beaucoup mieux cela que ForceCommand ssh -t restricted_usr_vm car il traite mieux les délais d’attente et ssh -t est un peu maladroit (et peut-être autrefois, parfois peu fiable). Je suppose aussi que des choses comme scp ne fonctionneront pas avec cette méthode, alors qu'elles fonctionneront parfaitement avec ProxyCommand.

0
Adam Katz