ihue ihue - 28 days ago 7
Linux Question

.bashrc File Preventing Some SFTP GUI APP from logging to the VM

I have a .bashrc file running on my Ubuntu server

red="\[\033[0;31m\]"
white="\[\033[1;37m\]"

toilet --gay -f mini " RSM PRODUCTION ";
export PS1="$white┌──[$red\u$white@$red\h$white]──$white[$red\w$white] \n└── $white"

#================================
# Alias =
#================================

alias L='ls -a -lrt'
alias l='ls -CF'
alias install='sudo apt-get install'
alias update='sudo apt-get update'
alias upgrade='sudo apt-get -u upgrade'
alias agi='sudo apt-get install'
alias agu='sudo apt-get update'
alias agg='sudo apt-get -u upgrade'

# personal aliases
alias ls='ls -hF --color' # add colors for filetype recognition
alias lx='ls -lXB' # sort by extension
alias lk='ls -lSr' # sort by size
alias la='ls -Al' # show hidden files
alias lr='ls -lR' # recursice ls
alias lt='ls -ltr' # sort by date
alias lm='ls -al |more' # pipe through 'more'
alias ll='ls -l' # long listing
alias lsize='ls --sort=size -lhr' # list by size
alias lsd='ls -l | grep "^d"' #list only directories
alias lalf='ls -alF'
alias acyl='cd ~/.icons/ACYL_Icon_Theme_0.9.3/ && bash AnyColorYouLike'
alias reboot='sudo shutdown -r now'
alias shutdown='sudo shutdown -h now'

#Command substitution
alias h='history | grep $1'
alias rm='rm -i'
alias cp='cp -v -i'
alias mv='mv -i'
alias which='type -all'
alias ..='cd ..'

#Bookmark Directory
alias dir_='cd /home/forge/rsm'

alias nginx_='cd /etc/nginx'
alias .ssh_='cd /root/.ssh'
alias ssh_='cd /etc/ssh'
alias root_='cd /root'
alias site_='cd /etc/nginx/sites-available'
alias bin_='cd /usr/local/bin'

dir_;





I can log-in to my VM perfectly fine via SSH.

I am not sure why in some SFTP client (GUI Apps) like
Cyberduck
preventing me from log-in into my VM. But when remove my .bashrc or deactivating it, it works fine.




Question



Is there a main reason behind this ?

What exactly that in my .bashrc that I shouldn't do ?

How would one go about and debug this ?




I'm opening to any suggestions at this moment.

Any hints / suggestions / helps on this be will be much appreciated !

Answer

Your bashrc file probably outputs stuff to stdout, which some SFTP programs might try to interpret as SFTP commands, leading to connection or authentication failure.

You should make sure your bashrc file only works for interactive sessions using one of those two techniques:

  • Either testing the value of PS1 (before your assignment of course) it will not be set for non-interactive sessions, or
  • testing if $- contains i ; which will only happen for interactive sessions.

So your script would look like:

if [[ $- == *i* ]]; then
red="\[\033[0;31m\]"
white="\[\033[1;37m\]"

toilet --gay -f mini  " RSM PRODUCTION ";
export PS1="$white┌──[$red\u$white@$red\h$white]──$white[$red\w$white] \n└── $white"
[...]
fi