comment définir l'option de sous-système sftp -s dans un fichier de configuration

11

La commande sftp prend en charge une option de sous-système (-s) qui permet à l'utilisateur distant de sélectionner l'exécutable du serveur sftp distant, et éventuellement de mettre à niveau vers sudo dans le processus comme ceci;

sftp -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" xxx.yyy.zzz.aaa

Cette commande diffère les options du client ssh dans ~ / .ssh / config permettant l'utilisation transparente de pubkey et du port personnalisé et des paramètres utilisateur.

Cependant, il subsystemsemble être spécifique à sftp, et donc il n'est pas défini dans le fichier de configuration et il semble qu'il doit être défini comme une option de ligne de commande pour sftp.

Cependant, certains outils encapsulent l'invocation sftp, il est donc impossible de définir l'option de sous-système, et donc bloqué avec l'accès utilisateur.

Existe-t-il un fichier d'options de configuration que je peux utiliser pour définir cela pour openssh sftp en général?

existe-t-il un fichier de configuration pour effectuer la manière dont gnome nautilus appelle le sftp pour son intégration dans le gestionnaire de fichiers?


La mise à jour d' une solution possible hacky mais fonctionnelle est ...

Il s'avère donc qu'il n'y a pas de fichier de configuration évident que sftp utilisera pour les options, j'ai donc fini par modifier un script wrapper générique pour ajouter explicitement l'option pour mes hôtes sélectionnés en le mettant dans mon chemin;

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/sftp
args=("$@")
#the final arg should contain a hostname of the form [user@]host[:path]
case "${args[@]: -1}" in
    myserver.com)
    exec $OPERATION -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" "$args"
    ;;
*)
   exec $OPERATION "$args" 
    ;;
esac

Cependant, en fonction de votre fichier sudoers, généralement pour exécuter sudo nécessite un tty, vous devez donc passer l'option "-t" à ssh, et devinez quoi? il n'y a aucune option de configuration pour la commande client ssh documentée qui fonctionne dans les fichiers ssh_config ou ~ / .ssh / config. haha.

J'écris donc un autre script wrapper pour fournir cela ....

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/ssh
args=("$@")
#locating the hostname is not so simple with ssh
exec $OPERATION -tt "$args"

cependant, j'ai maintenant du mal à obtenir que sftp utilise mon fichier wrapper ~ / bin / ssh, car il semble être codé en dur dans sftp et contrôlé par une option "-S"

Tom H
la source
Quel est ton but? Je ne comprends aucun avantage de votre commande.
jirib
3
J'exécute le ssh sans connexion utilisateur root, conformément à notre version de base, il permet donc aux utilisateurs sudo de modifier des fichiers avec des autorisations root via des outils qui s'intègrent avec gnome gvfs.
Tom H

Réponses:

2

Selon la ssh_config(5)page de manuel, vous pouvez configurer le chemin dans le sshd_configfichier de configuration:

 Subsystem
         Configures an external subsystem (e.g. file transfer daemon).
         Arguments should be a subsystem name and a command (with optional
         arguments) to execute upon subsystem request.

Il semble donc que vous puissiez simplement faire ceci:

Subsystem sftp /usr/libexec/openssh/sftp-server -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server"

Cette configuration va évidemment sur le serveur , pas dans la configuration client. Est ce que c'est ce que vous recherchiez? L'inconvénient, évidemment, est que chaque connexion sftp tentera de s'exécuter avec les privilèges root, ce qui interrompra l'accès non root à vos fichiers.

larsks
la source
oui, je cherchais quelque chose côté client. Bien que j'aie une idée avec laquelle j'ai mis à jour la question.
Tom H
Hmm, j'aimerais vraiment avoir une interface graphique ainsi qu'une réponse en ligne de commande. Je pense que larsks est sur les bonnes lignes mais je pense que la commande de sous-système sur le serveur distant doit être un script qui lui-même est capable de "connaître" les droits de l'utilisateur qui tente de se connecter, ou qui est en mesure de le faire gracieusement (et en silence) avec retour à une connexion sftp standard.
Julian Knight
Ou, bien sûr, je peux simplement utiliser WinSCP sur une boîte Windows !! Semble idiot mais non.
Julian Knight