> Tim, All, > > I've started a new thread to specifically look at the problem with > sftp_kio > not obtaining the port number to open the connection for sftp without the > user > manually providing it in the url. (eg: sftp://myhost:nonStdPort). This is > part > of bug http://bugs.pearsoncomputing.net/show_bug.cgi?id=897 > > Tim's commit of GIT hash e72f492 fixed the ability of sftp to connect to > remote hosts, but if the remote host ssh runs on a port other than 22, the > connection fails due to sftp no longer getting the correct host/port pair > from > either the system-wide config /etc/ssh/ssh_config or the user's > ~/.ssh/config. > > This worked correctly before the sftp bug was introduced and it > continues to > work for fish://, but I cannot find where the config files are read. It > appears > to be something read during ssh startup from the system-wide or user > .ssh/config > file. That is hinted to in the fish/README file: > > NOTE: From version 1.1.3 on, compression is no longer turned on auto- > matically. You have to specify it via ~/.ssh/config or wherever > your local ssh client reads its settings. The same goes for all other > connection parameters. OpenSSH for example has a powerful configuration > file syntax which lets you configure access differently for each host, > something I do not intend to duplicate. Read the ssh_config(5) man page > for details. > > The variable in sftp associated with the port is 'mPort', but I cannot > tell > where this could be set (yes, I know, just grep it, but somehow I'm > getting lost > in whether this is piped or cached and read somewhere rather than just > declared > and assigned) It appears to begin in ksshprocess.cpp with: > > bool KSshProcess::setOptions(const SshOptList& opts) { > kdDebug(KSSHPROC) << "KSshProcess::setOptions()" << endl; > mArgs.clear(); > SshOptListConstIterator it; > TQString cmd, subsystem; > mPassword = mUsername = mHost = TQString::null; > TQCString tmp; > for(it = opts.begin(); it != opts.end(); ++it) { > switch( (*it).opt ) { > <snip> > case SSH_PORT: > mArgs.append("-p"); > tmp.setNum((*it).num); > mArgs.append(tmp); > mPort = (*it).num; > break; > <snip> > > Also, both sftp:// and fish:// make use of an AuthInfo struct that > references > a port, but I cannot figure out how to tell what this contains: > > kio_sftp.cpp: // Setup AuthInfo for use with password caching and the > kio_sftp.cpp: AuthInfo info; > kio_sftp.cpp: info.url.setPort(mPort); > > fish/fish.h: /** AuthInfo object used for logging in */ > fish/fish.h: KIO::AuthInfo connectionAuth; > > It is frustrating because it still works fine in fish, so we should just > be > able to look there and find it, but it is apparently not that easy > either... > > Now regardless of how you look at it, the port information must be read > from > either /etc/ssh/ssh_config or ~/.ssh/config before the ssh connection is > opened > because that is the only place this information exists and it is > imperative that > you have that connection before attempting to open a connection -- or the > connection will simply be refused and fail. So this is taking place in > fish > somewhere and it was taking place in sftp somewhere as well -- the > questions is > where?? > > What say the experts?? I've grepped and looked until I'm blue in the > face and > I've exhausted what I can do. > > > -- > David C. Rankin, J.D.,P.E. I am not convinced that kio_sftp (or kio_fish) reads ANYTHING from ~/.ssh/config, rather I suspect it relies on implicit ssh behavior when ssh is invoked in the background. Something probably changed there; I will look into the problem shortly. Tim