[FFmpeg-devel] [PATCH] sftp: support reading config from ~/.ssh/config

Lukasz Marek lukasz.m.luki2 at gmail.com
Wed Mar 11 00:41:14 CET 2015


On 11.03.2015 00:22, Florian Jacob wrote:
> libssh provides a function for parsing ~/.ssh/config for ssh connection parameters like user, hostname, identity file
> and port. This patch makes ffmpeg use this function to take parameters from the config file for everything that's not
> explicitely set in the url. It also supports host aliases, i.e. using a shorthand in the url and replacing it with the
> hostname / IP address specified for the shorthand in the config file.
>
> Signed-off-by: Florian Jacob <projects+ffmpeg at florianjacob.de>
> ---
>   libavformat/libssh.c | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/libssh.c b/libavformat/libssh.c
> index 3ec60cb..1ed1d72 100644
> --- a/libavformat/libssh.c
> +++ b/libavformat/libssh.c
> @@ -55,6 +55,10 @@ static av_cold int libssh_create_ssh_session(LIBSSHContext *libssh, const char*
>           ssh_options_set(libssh->session, SSH_OPTIONS_TIMEOUT_USEC, &timeout);
>       }
>
> +    if (ssh_options_parse_config(libssh->session, NULL) < 0) {
> +        av_log(libssh, AV_LOG_ERROR, "Could not parse the config file.\n");

This should be a warning (not an error), or return with error code from 
here. A warning is probably better.

> +    }
> +
>       if (ssh_connect(libssh->session) != SSH_OK) {
>           av_log(libssh, AV_LOG_ERROR, "Connection failed: %s\n", ssh_get_error(libssh->session));
>           return AVERROR(EIO);
> @@ -187,7 +191,7 @@ static av_cold int libssh_open(URLContext *h, const char *url, int flags)
>   {
>       LIBSSHContext *libssh = h->priv_data;
>       char proto[10], path[MAX_URL_SIZE], hostname[1024], credencials[1024];
> -    int port = 22, ret;
> +    int port, ret;
>       const char *user = NULL, *pass = NULL;
>       char *end = NULL;
>
> @@ -198,8 +202,9 @@ static av_cold int libssh_open(URLContext *h, const char *url, int flags)
>                    path, sizeof(path),
>                    url);
>
> -    if (port <= 0 || port > 65535)
> -        port = 22;
> +    // a port of 0 will use a port from ~/.ssh/config or the default value 22
> +    if (port < 0 || port > 65535)
> +        port = 0;

Is this really required? Port will be overwritten if present in config 
either way?

>       if ((ret = libssh_create_ssh_session(libssh, hostname, port)) < 0)
>           goto fail;

I will test later, thanks.



More information about the ffmpeg-devel mailing list