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